Proszę odnieść się do tego wyrażenia regularnego HOWTO dla python3Dlaczego wyrażanie wyrażenia regularnego zawierającego "" działa bez ciągłego łańcucha.
https://docs.python.org/3/howto/regex.html#performing-matches
>>> p = re.compile('\d+')
>>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')
['12', '11', '10']
Czytałem, że dla wyrażenia regularnego zawierającego '\'
, surowe ciągi powinny być używane jak r'\d+'
ale w tym fragmencie kodu re.compile('\d+')
stosuje się bez przy użyciu specyfikatora r
. I działa dobrze. Dlaczego to działa? Dlaczego to wyrażenie regularne nie wymaga poprzedzającego go "r"?
Po prostu '\ d' nie jest prawidłową sekwencją escape, a gdy Python ją znajdzie, traktuje symbol' '\' 'jako literał' '\' '. [* W odróżnieniu od standardowego C wszystkie nierozpoznane sekwencje specjalne pozostają w ciągach bez zmian, tj. Lewy ukośnik pozostaje w łańcuchu. (Takie zachowanie jest przydatne podczas debugowania: jeśli sekwencja escape jest źle wpisana, wynik wyjściowy jest łatwiejszy do rozpoznania jako zepsuty). Ważne jest również, aby pamiętać, że sekwencje specjalne rozpoznawane tylko w literałach łańcuchowych należą do kategorii nierozpoznanych ucieczek dla bajtów. literały. *] (https://docs.python.org/3.1/reference/lexical_analysis.html) –