webentwicklung-frage-antwort-db.com.de

Pythons re: return True, wenn der String Regex enthält

Ich habe einen regulären Ausdruck wie diesen:

regexp = u'ba[r|z|d]'

Die Funktion muss True zurückgeben, wenn Word Strich, Baz oder Bad enthält. Kurz gesagt, ich brauche regexp analog für Python

'any-string' in 'text'

Wie kann ich das realisieren? Vielen Dank!

77
ghostmansd
import re
Word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(Word):
  print 'matched'
122
mattbornski

Das mit Abstand beste ist

bool(re.search('ba[rzd]', 'foobarrrr'))

Gibt True zurück

87
Venu Murthy

Match Objekte sind immer wahr und None wird zurückgegeben, wenn keine Übereinstimmung vorliegt. Einfach auf Richtigkeit prüfen.

Code:

>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
...     m.group(0)
...
'bar'

Ausgabe = bar

Wenn Sie search Funktionalität wollen

>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
...     m.group(0)
...
'bar'

und wenn regexp nicht gefunden als

>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
...     m.group(0)
... else:
...   print "no match"
...
no match

Wie @bukzor erwähnt, wenn st = foo bar than match wird nicht funktionieren. Also, es ist angemessener, re.search.

14
RanRag

Hier ist eine Funktion, die das macht, was Sie wollen:

import re

def is_match(regex, text):
    pattern = re.compile(regex, text)
    return pattern.search(text) is not None

Die Suchmethode für reguläre Ausdrücke gibt bei Erfolg ein Objekt und None zurück, wenn das Muster nicht in der Zeichenfolge gefunden wird. In diesem Sinne geben wir True zurück, solange die Suche uns etwas zurückgibt.

Beispiele:

>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
1
kylan

Sie können so etwas tun:

Bei Verwendung der Suche wird ein SRE_match-Objekt zurückgegeben, wenn es mit Ihrer Suchzeichenfolge übereinstimmt.

>>> import re
>>> m = re.search(u'ba[r|z|d]', 'bar')
>>> m
<_sre.SRE_Match object at 0x02027288>
>>> m.group()
'bar'
>>> n = re.search(u'ba[r|z|d]', 'bas')
>>> n.group()

Wenn nicht, wird None zurückgegeben

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    n.group()
AttributeError: 'NoneType' object has no attribute 'group'

Und nur um es auszudrucken, um es noch einmal zu demonstrieren:

>>> print n
None
0
James R