2017-06-09 1 views
5

Ich versuche, alle Vorkommen der Zeichenfolge Article gefolgt von einer Zahl (einzelne oder mehrere Ziffern), die nicht gefolgt von einer öffnenden Klammern sind. In Sublime Text verwende ich die folgende regex:Alternative zu Possessiv-Quantifizierer in Python

Article\s[0-9]++(?!\() 

die folgende Zeichenfolge zu suchen:

Article 29 
Article 30(1) 

die nicht Article 30(1) passt aber Article 29 und Article 1 (wie ich es zu erwarten).

Wenn das gleiche in Python zu tun versuchen, (3)

import re 
article_list = re.findall(r'Article\s[0-9]++(?!\()', "Article 30(1)") 

mit erhalte ich eine der folgenden Fehler, wie ich einen (verschachtelten) possessiven quantifier bin mit, die von Python Regex nicht unterstützt wird. Gibt es eine Möglichkeit, das, was ich möchte (nicht) in Python übereinstimmen?

Antwort

3

Python re unterstützt keine Possessivquantifizierer. Sie können stattdessen Python PyPi regex module verwenden, das diese Art von Quantifizierern unterstützt. Oder verwenden Sie die folgenden Umgehungsmöglichkeiten.

Sie müssen entweder eine Ziffer zu dem Look-Ahead hinzu:

Article\s[0-9]+(?![(0-9]) 
        ^^^ 

this regex demo See.

Alternativ können Sie eine Wortgrenze:

Article\s[0-9]+\b(?!\() 
       ^

this regex demo See.

2

Sie können auch eine Atomgruppe (?>...) um emulieren, was Sie vergleichen wollen, die (?=(...))\1 Abhilfe verwenden:

(?=(Article\s[0-9]+))\1(?!\() 

(ein Look-Ahead natürlich wie eine eine Atomgruppe verhält sich alles, was Sie brauchen, ist eine Erfassung und eine Rückreferenz)

+0

Ich sehe keinen Grund, diese Antwort downvote ... –