Из того, что я прочитал, ^ должен соответствовать началу строки, а $ конец. Однако, с 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.