In Python kann ich einen regulären Ausdruck so kompilieren, dass die Groß- und Kleinschreibung nicht berücksichtigt wird 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, dasselbe zu tun, aber ohne es zu benutzen re.compile
? Ich kann nichts wie Perls i
Suffix (zB m/test/i
) in der Dokumentation finden.
Antworten:
Fahren Sie
re.IGNORECASE
mit demflags
param vonsearch
,match
odersub
:quelle
re.match('test', 'TeSt', re.IGNORECASE)
könnte dazu führen,TypeError
dass eines der Attribute istNone
. Verwenden Sietry & except
, um denTypeError
Abgleich mit first_string == second_string abzufangen. Beispielcodedef 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 CodeNone
erster Stelle steht.flags
zu verwenden,re.sub
da es sonstre.IGNORECASE
an dascount
Argument übergeben wird (s. Auch stackoverflow.com/questions/42581/… )Sie können auch Suchvorgänge ohne Berücksichtigung der Groß- und Kleinschreibung mit search / match ohne das Flag IGNORECASE durchführen (getestet in Python 2.7.3):
quelle
(?(condition)yes|no)
die in 2.4 hinzugefügt wurde). Ich gehe daher davon aus, dass sie seit der ersten Version desre
Moduls, die meiner Meinung nach hinzugefügt wurde, immer verfügbar war in 1.5. Grundsätzlich seit Beginn der Zeit in jeder Hinsicht, wenn es um Python geht. Es ist ungefähr in der Mitteregex
Modul zugunsten desre
Moduls veraltet war .re.match(r'''A ((?i)B) C''', "a b c").group(0)
dass bei allem (A und C), nicht nur bei B, die Übereinstimmung zwischen Groß- und Kleinschreibung nicht berücksichtigt wird! Wenn Sie nur Groß- und Kleinschreibung für eine bestimmte Erfassungsgruppe suchen, ist dies nicht der gesuchte Droide.Der Marker, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird,
(?i)
kann direkt in das Regex-Muster integriert werden:quelle
'(?i)'
Ansatz hat auch den Vorteil, dass Sie eine Liste von regulären Ausdrücken erstellen können, von denen einige die Groß- und Kleinschreibung nicht berücksichtigen und andere nicht. (Und natürlich können Siere.compile
diese Liste abbilden , wenn Sie möchten.)flags=re.IGNORECASE
?Sie können beim Kompilieren von Mustern auch festlegen, dass die Groß- und Kleinschreibung nicht berücksichtigt wird:
quelle
Bei Importen
In der Laufzeitverarbeitung:
Es sollte erwähnt werden, dass die
re.compile
Nichtverwendung verschwenderisch ist. Jedes Mal, wenn die obige Übereinstimmungsmethode aufgerufen wird, wird der reguläre Ausdruck kompiliert. Dies ist auch in anderen Programmiersprachen fehlerhaft. Das Folgende ist die bessere Praxis.In der App-Initialisierung:
In der Laufzeitverarbeitung:
quelle
re.compile()
...quelle
Geben Sie re.IGNORECASE an, um Vorgänge ohne Berücksichtigung der Groß- und Kleinschreibung auszuführen
und wenn wir Text ersetzen wollen, der zum Fall passt ...
quelle
Wenn Sie ersetzen möchten, aber den Stil der vorherigen str beibehalten möchten. Es ist möglich.
Beispiel: Markieren Sie die Zeichenfolge "test asdasd TEST asd tEst asdasd".
test asdasd TEST asd tEst asdasd
quelle
Für reguläre Ausdrücke ohne Berücksichtigung der Groß- und Kleinschreibung (Regex): Es gibt zwei Möglichkeiten, indem Sie Ihren Code hinzufügen:
flags=re.IGNORECASE
Der Marker, bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird
(?i)
quelle