W Pythonie mogę skompilować wyrażenie regularne bez rozróżniania wielkości liter, używając 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>
Czy istnieje sposób na zrobienie tego samego, ale bez użycia re.compile
. Nie mogę znaleźć czegoś takiego jak i
przyrostek Perla (np. m/test/i
) W dokumentacji.
Odpowiedzi:
Przechodzą
re.IGNORECASE
doflags
param zsearch
,match
lubsub
:źródło
re.match('test', 'TeSt', re.IGNORECASE)
może prowadzić do tego,TypeError
że którykolwiek z atrybutów jestNone
. Używanietry & except
do łapaniaTypeError
dopasowania przez first_string == second_string. Przykładowy koddef 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
pierwszy.flags
ponieważ wre.sub
przeciwnym razie zostanie on przekazanyre.IGNORECASE
docount
argumentu (Możesz także wyszukiwać bez rozróżniania wielkości liter, używając wyszukiwania / dopasowania bez flagi IGNORECASE (testowane w Pythonie 2.7.3):
źródło
(?(condition)yes|no)
, że jest dodana w 2.4), więc spodziewam się, że zawsze była dostępna od pierwszej wersjire
modułu, która, jak myślę, została dodana w 1.5. Zasadniczo od początku czasu dla wszystkich celów i celów, jeśli chodzi o Python. Jest udokumentowany mniej więcej w połowie pierwszej części tej strony: docs.python.org/2/library/re.html#regular-expression-syntaxregex
moduł został wycofany na korzyśćre
modułu.re.match(r'''A ((?i)B) C''', "a b c").group(0)
powoduje to rozróżnianie wielkości liter we wszystkich elementach (A i C), nie tylko w B! Jeśli chcesz dopasowywać rozróżnianie wielkości liter tylko do określonej grupy przechwytywania, nie jest to droid, którego szukasz.Znacznik bez rozróżniania wielkości liter
(?i)
może zostać włączony bezpośrednio do wzoru wyrażenia regularnego:źródło
'(?i)'
podejście ma również tę zaletę, że można utworzyć listę wyrażeń regularnych, z których niektóre są wielkości liter, a niektóre nie. (I oczywiście, jeśli chcesz, możesz zmapowaćre.compile
tę listę).flags=re.IGNORECASE
?Podczas kompilacji wzorca możesz także zdefiniować wielkość liter bez rozróżniania wielkości liter:
źródło
W imporcie
Przetwarzanie w czasie wykonywania:
Należy wspomnieć, że nieużywanie
re.compile
jest marnotrawstwem. Za każdym razem, gdy wywoływana jest powyższa metoda dopasowania, wyrażenie regularne będzie kompilowane. Jest to również błędna praktyka w innych językach programowania. Poniżej znajduje się lepsza praktyka.Podczas inicjalizacji aplikacji:
Przetwarzanie w czasie wykonywania:
źródło
re.compile()
....źródło
Aby wykonać operacje bez rozróżniania wielkości liter, podaj polecenie RE.IGNORECASE
a jeśli chcemy zastąpić tekst pasujący do sprawy ...
źródło
Jeśli chcesz zastąpić, ale nadal zachować styl poprzedniego str. To jest możliwe.
Na przykład: zaznacz ciąg „test asdasd TEST asd tEst asdasd”.
test asdasd TEST asd tEst asdasd
źródło
W przypadku wyrażeń regularnych bez rozróżniania wielkości liter (Regex): Istnieją dwa sposoby dodania kodu:
flags=re.IGNORECASE
Znacznik bez rozróżniania wielkości liter
(?i)
źródło