539 Stimmen

Groß-/Kleinschreibung unempfindlicher regulärer Ausdruck ohne re.compile?

In Python kann ich einen regulären Ausdruck so kompilieren, dass er die Groß- und Kleinschreibung nicht berücksichtigt, indem ich 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 die Verwendung von re.compile . Ich kann nichts finden, was dem Perl's i Suffix (z. B. m/test/i ) in der Dokumentation.

840voto

Michael Haren Punkte 101002

Pass re.IGNORECASE zum flags Nennwert von search , match , oder sub :

re.search('test', 'TeSt', re.IGNORECASE)
re.match('test', 'TeSt', re.IGNORECASE)
re.sub('test', 'xxxx', 'Testing', flags=re.IGNORECASE)

155voto

aem999 Punkte 16353

Sie können auch Suchen ohne Berücksichtigung der Groß-/Kleinschreibung durchführen, indem Sie search/match ohne das IGNORECASE-Flag verwenden (getestet in Python 2.7.3):

re.search(r'(?i)test', 'TeSt').group()    ## returns 'TeSt'
re.match(r'(?i)test', 'TeSt').group()     ## returns 'TeSt'

93voto

Raymond Hettinger Punkte 197261

Die Groß- und Kleinschreibung wird nicht berücksichtigt, (?i) kann direkt in das Regex-Muster integriert werden:

>>> import re
>>> s = 'This is one Test, another TEST, and another test.'
>>> re.findall('(?i)test', s)
['Test', 'TEST', 'test']

25voto

panofish Punkte 7010

Sie können beim Kompilieren des Musters auch die Groß- und Kleinschreibung außer Acht lassen:

pattern = re.compile('FIle:/+(.*)', re.IGNORECASE)

16voto

Douglas Daseeco Punkte 3112

Bei Einfuhren

import re

Bei der Verarbeitung während der Laufzeit:

RE_TEST = r'test'
if re.match(RE_TEST, 'TeSt', re.IGNORECASE):

Es ist zu erwähnen, dass die Nichtverwendung von re.compile ist verschwenderisch. Jedes Mal, wenn die obige Match-Methode aufgerufen wird, wird der reguläre Ausdruck kompiliert. Dies ist auch in anderen Programmiersprachen eine fehlerhafte Praxis. Die folgende Methode ist die bessere.

In der App-Initialisierung:

self.RE_TEST = re.compile('test', re.IGNORECASE)

Bei der Verarbeitung während der Laufzeit:

if self.RE_TEST.match('TeSt'):

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X