Из того, что я прочитал, ^
должен соответствовать началу строки, а $
конец. Однако, с re.search()
, похоже, что поведение ^
продолжает работать нормально, а $
"breaks". Пример:
>>> a = re.compile( "^a" )
>>> print a.search( "cat", 1, 3 )
None
Это кажется мне правильным - 'a'
не находится в начале строки, даже если она находится в начале поиска.
>>> a = re.compile( "a$" )
>>> print a.search( "cat", 0, 2 )
<_sre.SRE_Match object at 0x7f41df2334a8>
Это кажется мне неправильным или, по крайней мере, непоследовательным.
Документация в модуле re
явно указывает, что поведение ^
не изменяется из-за аргументов start/end для re.search
, но никаких изменений в поведении не упоминается для $
(что я видно).
Может ли кто-нибудь объяснить, почему все было спроектировано таким образом и/или предложило удобное обходное решение?
В обходном пути я хотел бы создать регулярное выражение, которое всегда соответствует концу строки, даже если кто-то использует аргумент end для re.search
.
И почему был создан re.search
такой, что:
s.search( string, endPos=len(string) - 1 )
совпадает с
s.search( string[:-1] )
когда
s.search( string, startPos=1 )
явно и намеренно не совпадает с
s.search( string[1:] )
Кажется, что проблема с несогласованностью между ^
и $
невелика и больше несогласованности в функции re.search
.