Die groß / Kleinschreibung bei regulären Ausdrucks ohne re.zusammenstellen?
In Python, kann ich kompilieren eines regulären Ausdrucks-groß-und Kleinschreibung mit re.compile
:
>>> s = 'TeSt'
>>> casesensitive = re.compile('test')
>>> ignorecase = re.compile('test', re.IGNORECASE)
>>>
>>> print casesensitive.match(s)
None
>>> print ignorecase.match(s)
<_sre.SRE_Match object at 0x02F0B608>
Gibt es eine Möglichkeit, das gleiche zu tun, aber ohne Verwendung re.compile
. Ich kann nichts finden, wie Perl - i
- suffix (z.B. m/test/i
) in der Dokumentation.
- Sie finden eine hervorragende Einführung zu regulären experssoins unter: python-course.eu/re.php
Du musst angemeldet sein, um einen Kommentar abzugeben.
Pass
re.IGNORECASE
zu denflags
param von diesearch
,match
, odersub
:re.match('test', 'TeSt', re.IGNORECASE)
könnteTypeError
wenn entweder das AttributNone
. Mittry & except
zu fangenTypeError
Abstimmung durch first_string == second_string. Beispiel-Codedef equal_ignore_case(first_string, second_string): try: return re.match(first_string, second_string, re.IGNORECASE) is not None except (AttributeError, TypeError): return first_string == second_string
Demo-CodeKönnen Sie auch eine case-insensitive Suche über search/match ohne die IGNORECASE-flag (getestet mit Python 2.7.3):
(?(condition)yes|no)
was Sie sagt, wurde in 2.4), so erwarte ich es schon immer seit der ersten version desre
Modul, was ich denke, wurde in 1.5. Im Grunde seit dem Beginn der Zeit für alle Absichten und Zwecke, wenn es um Python. Es ist dokumentiert, etwa auf halbem Weg durch den ersten Abschnitt dieser Seite: docs.python.org/2/library/re.html#regular-expression-syntaxregex
Modul war veraltet, zu Gunsten derre
Modul.[st for st in filter(lambda x: not search(r'(?i)Mac', x), ['macintosh','tomato','MacMahon', 'and', 'maCaroni', 'pasta'])]
filtert alle diejenigen, die [Mm][Aa][Cc] entspricht und nur lassen Sie uns mit['tomato', 'and', 'pasta']
re.match(r'''A ((?i)B) C''', "a b c").group(0)
Ursachen case-insensitive matching auf alles (A und C), nicht einfach auf B! Wenn Sie nur wollen, Fall-insens matching auf eine bestimmte capture-Gruppe, dies ist nicht die Droiden, die Sie suchen.Die groß- /Kleinschreibung marker
(?i)
integriert werden können, direkt in die regex-Muster:Können Sie auch definieren, groß-und Kleinschreibung während der pattern kompilieren:
Einfuhren
Im run-time-Verarbeitung:
Sollte erwähnt werden, dass nicht mit
re.compile
zu aufwendig ist. Jedes mal, wenn die oben genannten match-Methode aufgerufen wird, wird der reguläre Ausdruck kompiliert werden. Dies ist auch die fehlerhafte Praxis, die in anderen Programmiersprachen. Die unten ist die bessere Praxis.In-app-Initialisierung:
Im run-time-Verarbeitung:
re.compile()
....Zur Durchführung von groß-und Kleinschreibung operations, supply re.IGNORECASE
und wenn wir wollen, ersetzen Sie text matching der Fall ist...