regex - pas - expression régulière python extraire



Expressions régulières: s'assurer que b ne vient pas entre a et c (3)

En utilisant PCRE, une solution serait:

Cette utilisation de m drapeau. Si vous voulez vérifier uniquement depuis le début et la fin d'une ligne, ajoutez respectivement ^ et $ au début et à la fin.

abc(?!.*(abc|xyz).*123).*123(?!.*(abc|xyz).*xyz).*xyz

Debuggex Demo

https://src-bin.com

Voici quelque chose que j'essaie de faire avec des expressions régulières, et je ne peux pas comprendre comment. J'ai un gros fichier et des chaînes abc , 123 et xyz qui apparaissent plusieurs fois dans le fichier.

Je souhaite qu'une expression régulière corresponde à une sous-chaîne du grand fichier qui commence par abc , contient 123 quelque part au milieu, se termine par xyz et ne contient aucune autre occurrence de abc ou xyz dans la sous-chaîne en dehors du début et de la fin.

Est-ce possible avec des expressions régulières?


Answer #1

Le comment de hvd est tout à fait approprié, et cela ne constitue qu'un exemple. En SQL, par exemple, je pense qu'il serait plus clair de faire:

where val like 'abc%123%xyz' and
      val not like 'abc%abc%' and
      val not like '%xyz%xyz'

J'imagine que quelque chose d'assez similaire est simple à faire dans d'autres environnements.


Answer #2

Vous pouvez utiliser le lookaround.

/^abc(?!.*abc).*123.*(?<!xyz.*)xyz$/g

(Je ne l'ai pas testé.)





python-2.7