Прошу прощения, если это где-то опубликовано, но мой беглый поиск ничего не нашел.
При выполнении некоторого программирования на Python я заметил, что следующая команда:
re.sub("a*((ab)*)b", r"\1", "aabb")
возвращает пустую строку. Но эквивалентная команда в sed:
echo "aabb" | sed "s/a*\(\(ab\)*\)b/\1/"
возвращает ab
.
Мне кажется, что директива "a *" в начале регулярного выражения python будет соответствовать как a
, так и "(ab) *", чтобы соответствовать нулю, но я понятия не имею, как sed появляется ab
. Кто-нибудь знает, какая разница между двумя двигателями регулярных выражений, которые это порождают? Я считаю, что они по-умолчанию соответствуют звездам по умолчанию, но мне пришло в голову, что sed может совпадать с правильным, а не с левым. Любое понимание было бы оценено.