Мы все знаем, что *
означает 0 или более, и если он не используется с нежадным оператором, таким как ?
, он всегда будет максимально жадным.
>>> re.search('.*hello','hai hello there, hello again').group()
'hai hello there, hello'
>>> re.search('.*?hello','hai hello there, hello again').group()
'hai hello'
Я только что наткнулся на следующий код и немного удивился, увидев его поведение.
>>> re.search('\^*','abc^').group()
''
>>> re.search('a*','abc^').group()
'a'
С шаблоном \^*
я ожидал, что он будет соответствовать одному символу вставки, который присутствует в строке.
Но почему он должен вести себя не жадно, выходя с 0 появлением символа вставки, с совпадением пустой строки?
Это потому, что ^
специально для регулярных выражений? Если да, то как мы можем сопоставить этот символ ^
с символом *
?
Примечание. Конечно, с \^+
в качестве шаблона он, очевидно, будет соответствовать буквальному символу вставки.
\^*
соответствует пустой строке в начале, аre.search
возвращает только это первое вхождение. - person Wiktor Stribiżew   schedule 22.09.2017re.search('a*','bca^').group()
он также возвращает пустую строку. Сначала движок анализирует символb
и сам завершает работу с нулевым совпадением. Спасибо :) - person Dinesh   schedule 22.09.2017*
всегда жаден. А потом посмотрите мой топовый комментарий. - person Wiktor Stribiżew   schedule 22.09.2017