2017-09-19 2 views
1

Ich habe gerade angefangen zu lernen (seit zwei Tagen) und schreibe Python-Code.Regex verhält sich nicht wie erwartet

Ich habe versucht, eine Regex zu arbeiten, aber ohne Erfolg. Ich bekomme kein Ergebnis.

Meine Regex sieht aus wie dieser (?<=!#)device.*\b\W und der Test-String ist

!# Approved : YES !# REASON: test !# DEVICE: TEST1TEST2 !# ACL: <Rule No>/110 and 102/120 !# SECTION: MORI !# REQUESTER: test1x !# MODIFIER: test1

https://regex101.com/r/m05Coq/1

Ich versuche, das Gerät Zeichenfolge zu lesen. Wie Sie sehen, funktioniert dies im Regex-Editor, aber nicht sicher, warum es nicht funktioniert, wenn ich dasselbe in einer Python-App verwende.

Mein Python-Code sieht wie folgt aus:

import re 

teststr = """!# Approved : YES 
!# REASON: test 
!# DEVICE: TEST1TEST2 
!# ACL: <Rule No>/110 and 102/120 
!# SECTION: MORI 
!# REQUESTER: test1x 
!# MODIFIER: test1""" 

def test(): 
    q = re.compile(r'(?<=!#)device.*\b\W', re.MULTILINE | re.IGNORECASE) 
    print(q.findall(teststr)) 
+1

Sie haben verlegt ')' hier:. 'Q = re.compile (?! R '(<= #) Gerät * \ b \ W '), re.MULTILINE, re.IGNORECASE'. Ich denke, es sollte 'q = re.compile (r '(? <=! #) Gerät. * \ B \ W', re.MULTILINE | re.IGNORECASE)' – mshsayem

+0

schlechte Kopie einfügen ... Ich habe den Code behoben jetzt. Das Ergebnis ändert sich jedoch nicht :( – Navyseal

Antwort

1

Die Art und Weise Sie die Flaggen gelten ist etwas anders, indem sie hinzugefügt und nicht als mehrere Argumente übergeben werden sollte. Diese Methode hat mir das gleiche Ergebnis wie die Website Regex Tester Sie verknüpft:

import re 

teststr = """!# Approved : YES 
!# REASON: test 
!# DEVICE: TEST1TEST2 
!# ACL: <Rule No>/110 and 102/120 
!# SECTION: MORI 
!# REQUESTER: test1x 
!# MODIFIER: test1""" 

def test(): 
    q = re.compile(r'(?<=!#)device.*\b\W', flags=re.IGNORECASE+re.MULTILINE) 
    print(q.findall(teststr)) 

test() 
+0

Die Verwendung des Binär- oder Operators '|', wie mshsayem in ihrem obigen Kommentar sagte, würde das gleiche Ergebnis wie die Addition für diese Flags ergeben, da sie in ihrer binären Darstellung niemals überlappende 1's haben werden. –

+0

hmm. ..Ich bekomme kein Ergebnis dafür :( – Navyseal

+0

Das ist seltsam, mit Python 3.5 bekomme ich '['DEVICE: TEST1TEST2 \ n']'. Ich bearbeite genau den vollen Code, den ich gerade laufe mit dem oben bearbeiteten Beispiel, wenn ich 'test()' an den unteren Rand anschließe, um die Testfunktion aufzurufen –

Verwandte Themen