2012-12-07 13 views
7

Ich versuche, Kommentare zu erstellen, wenn eine Regex kompiliert, aber wenn ich die re.VERBOSE-Flag verwenden, bekomme ich kein matchresult mehr.Python Regex kompilieren (mit re.VERBOSE) funktioniert nicht

(Python 3.3.0)

Bevor:

regex = re.compile(r"Duke wann", re.IGNORECASE) 
print(regex.search("He is called: Duke WAnn.").group()) 

Output: Duke wann

After:

regex = re.compile(r''' 
Duke # First name 
Wann #Last Name 
''', re.VERBOSE | re.IGNORECASE) 

print(regex.search("He is called: Duke WAnn.").group())` 

Output: Attribute: 'NoneType' Objekt hat kein Attribut 'Gruppe'

+0

tatsächlich sehen, dass die falsche Syntax für einen rohen mehrzeilige Zeichenfolge ist: 'r '' das ist falsch '' ''. Die richtige Syntax muss r mit doppelten Anführungszeichen verwenden: "r" "" das ist richtig "" ". Siehe [Wie schreibe ich einen mehrzeiligen String in Python richtig?] (Https://stackoverflow.com/questions/46003452/how-to-correctly-write-a-raw-multiline-string-in-python) – smci

Antwort

8

Whitespaces werden ignoriert (dh Ihr Ausdruck effektiv DukeWann ist), so müssen Sie sicherstellen, dass es ein Raum gibt es:

regex = re.compile(r''' 
Duke[ ] # First name followed by a space 
Wann #Last Name 
''', re.VERBOSE | re.IGNORECASE) 

http://docs.python.org/2/library/re.html#re.VERBOSE

+0

Tut dies dass alle literalen Leerzeichen in der Regex durch '[]' ersetzt werden? Soweit ich das beurteilen kann, scheint dies der Fall zu sein. –

+0

@Brad ja. Sie müssen explizit angegeben werden, wie eine der Möglichkeiten, die die Dokumentation erwähnt, ist –

+0

Eigentlich ist das die falsche Syntax für eine rohe mehrzeilige Zeichenfolge: 'r '' das ist falsch '' ''. Die richtige Syntax muss r mit doppelten Anführungszeichen verwenden: "r" "" das ist richtig "" ". Siehe [Wie schreibt man einen mehrzeiligen String in Python richtig?] (Https://stackoverflow.com/questions/46003452/how-to-correctly-write-a-raw-multiline-string-in-python) – smci