Essayer de ne pas correspondre à des mots qui ont 5 caractères ou plus et ne contenant que A-Z, 0-9, "/", "-" et "". " dans les textes.
essayé un million de fegex différentes. Celui que j'utilise maintenant est: p>
(? <= [A-Z0-9 /.-] {5,} \ s). * P>
Ceci fonctionne plutôt bien, Mais le texte me manque devant l'expression, lorsque l'expression est au milieu d'une ligne. p>
liste: p> résultat attendu: < / p> essentiellement, je veux juste que l'expression retirée si elle au début de la chaîne. p> p>
3 Réponses :
Cela semble fonctionner. Il serait utile que vous spécifiez la langue que vous utilisez. C'est Java. Il supprime simplement le modèle s'il existe au début de la chaîne.
String[] test = {
"Test ABC123 Test", "ABC123 Test", "Test ABC123",
"Test ABC-123 Test", "ABC-123 Test", "Test ABC-123",
"Test ABC/123 Test", "ABC/123 Test", "Test ABC/123"
};
for (String t : test) {
String nt = t.replaceAll("^[A-Z0-9/.-]{5,}\\s(.*)", "$1");
System.out.println("Before: " + t);
System.out.println("After: " + nt);
System.out.println("---------------------------");
}
Je ne dis pas que la chaîne est probablement i> d'avoir des caractères transversaux, mais (. *) Code> ne correspondrait pas au reste de la ligne si vous étiez présent à moins d'avoir utilisé le < code> motif.dotall code> drapeau.
En fait, la façon dont j'ai utilisé le motif qu'il correspond parce qu'il trouve simplement une ou plusieurs instances du match. Donc, la nouvelle ligne n'est pas pertinente. Vous seriez correct si je faisait correspondre la chaîne complète.
En réalité, s'il n'y avait pas de caractères newline, je pense que vous correspondiez à la chaîne entière et en le remplaçant avec tout ce qui n'est pas [A-Z0-9 /.-] {5,} \ s code>. Mais s'il y a une nouvelle ligne, vous correspondez à tout ce qui vous convient, mais sans y compris cette nouvelle ligne, cela finit donc de travailler de toute façon. Pour voir ce que je parle, remplacez "1 $" code> avec "" code> et voyez ce que vous arrivez avec.
Ceci recherche l'expression régulière Une implémentation de python: p> impression: p> ^ [A-Z0-9 /.-] {5,} \ s + code> et si trouvé le remplace avec la chaîne vide.
Ceci a fonctionné:
(?<=^[A-Z0-9/.-]{5,}\s).*
Que diriez-vous de
^ \ s {5,}? Code>?Vous dites que vous utilisez une affirmation de lookefehind de longueur variable?
De info Tags : "Étant donné que les expressions régulières ne sont pas entièrement normalisées, toutes les questions avec cette balise devraient également inclure une balise spécifiant la langage ou outil de programmation applicable. "
Vous obtenez ces résultats parce que vous utilisez un lookeDehind
(? <= Code> qui est non consommant et affirme ce qui est à gauche est[A-Z0-9 /.-] {5, } \ s code> Si cette assertion est vraie, faites correspondre 0 ou plus Times tout CHAR, sauf une nouvelle ligne. Notez que\ s code> correspond également à une nouvelle ligne. Voir REGEX101.COM/R/DRGSVE/1 Vous pouvez omettre le lookbehind et utiliser une ancre ^ code> < HREF = "https://regex101.com/r/gakprh/1" rel = "NOFOOLS NOREFERRER"> REGEX101.com/R/GAKPRH/1