Я читаю книгу, и они приводят пример того, как соответствовать заданной строке с регулярными выражениями. Вот их пример:Стандартное выражение Regex vs python regex
b*(abb*)*(a|∊) - Strings of a's and b's with no consecutive a's.
Теперь я попытался преобразовать его в Python, как так:
>> p = re.compile(r'b*(abb*)*(a|)') # OR
>> p = re.compile(r'b*(abb*)*(a|\b)')
# BUT it still doesn't work
>>> p.match('aa')
<_sre.SRE_Match object at 0x7fd9ad028c68>
Мой вопрос два раза:
- Что является эквивалентом epsilon в python, чтобы сделать вышеприведенный пример?
- Может кто-нибудь объяснить мне, почему теоретический или стандартный способ делать регулярные выражения не работает в python? Может ли это иметь какое-то отношение к самому длинному и кратчайшему совпадению?
Разъяснение: Для людей, спрашивающих, что стандартное регулярное выражение - это формальная стандартная теория языка: http://en.wikipedia.org/wiki/Regular_expression#Formal_language_theory
комментарий на примере ошибочен ... регулярное выражение не только матч струн-х и б без последовательных в. Я бы заменил bb * на b + btw. –
Каково ожидаемое поведение эпсилона в этом контексте? Я никогда не видел этого раньше, и я программировал 12 лет ... – jathanism
«Стандартное» регулярное выражение? Кто определил стандарт? ANSI? ISO? IEEE? О, МОЙ БОГ? –