Regex pour correspondre lorsqu'une chaîne est présente deux fois
Je suis horrible à les expressions régulières et je ne les utilise pas assez souvent pour me rappeler la syntaxe entre les utilisations.
Je suis en utilisant grepWin à la recherche de mes fichiers. J'ai besoin de faire une recherche qui va renvoyer les fichiers qui ont une chaîne donnée deux fois.
Ainsi, par exemple, si j'étais à la recherche sur le mot "comment", alors le fichier ne correspondent pas:
Bonjour
comment êtes-vous aujourd'hui?
mais fichier deux:
Bonjour
comment êtes-vous aujourd'hui?Je suis bien, et vous?
Tout savoir comment faire une RegEx qui vous corresponde?
source d'informationauteur Vaccano | 2011-11-18
Vous devez vous connecter pour publier un commentaire.
quelque chose comme ceci (dépend de la langue et votre tâche spécifique)
Edit:
selon @CodeJockey
(cela devient plus compliqué)
@CodeJockey: Merci pour les commentaires
Je ne sais pas ce grepWin prend en charge, mais voici ce que je suis venu pour faire quelque chose de correspondre exactement deux fois.
Explication:
Cela vous assure de trouver deux "s", mais les textes entre le "comment"et de chaque côté d'eux ne contiennent pas de "comment".
Bien sûr, vous pouvez remplacer n'importe quelle chaîne pour les "comment" dans l'expression.
Si vous voulez à "simplifier" l'écriture de l'expression de recherche à deux reprises, vous pouvez utiliser des références arrières ainsi:
Refiddle avec cette expression
Explication:
J'ai ajouté
?:
de faire le négatif lookaheads texte non-capture. Ensuite, j'ai ajouté entre parenthèses autour de l'ordinairehow
pour en faire une capture d'un sous-modèle (le premier et le seul).J'ai dû inclure les "comment" de nouveau dans la première anticipation parce que c'est une anticipation négatif (sens de capture serait pas contenir "comment") et les prisonniers "comment" n'est pas capturée encore à ce point.
C'est beaucoup plus difficile que je pensais au début qu'il serait, et nécessite de longueur variable lookbehind, qui grepWin ne prend pas en charge...
cette expression:
a été utilisé avec succès dans Eclipse, à l'aide de la Recherche "> Fichier boîte de dialogue" pour exclure les fichiers avec l'un et les trois instances de
blah
et pour inclure les fichiers avec exactement deux instances deblah
.Eclipse n'a pas permis un
.*
dans lookbehind, j'ai donc utilisé.{0,99999}
à la place.Il est possible, avec le bon outil, mais Il n'est pas assez pour le faire fonctionner avec grepWin (voir réponse ci-dessus). Pouvez-vous utiliser d'autres outils (comme Eclipse) et que vouliez-vous faire avec les fichiers par la suite?