#python #regex
#python #регулярное выражение
Вопрос:
В регулярном выражении: у меня возникла проблема со следующим языком:
L = {((aa) repeat n times)(b repeat n times) | n >=1 }
Я пытался это сделать (aa) b
, но это не может гарантировать, что aa
и b
происходит одинаковое количество раз.
Есть ли какой-нибудь простой способ, которым я могу это сделать (на python?)? Спасибо.
Комментарии:
1.
n
должно быть одинаковым, верно? Напримерaaaab
, сбой,aab
передача?2. @CertainPerformance да, n должно быть одинаковым.
3. Регулярное выражение не подходит для проверки того, что вещи происходят одинаковое количество раз. Какой язык вы используете?
4. Повторное открытие, потому что OP что-то попробовал, и ответ не выглядит очевидным. Я не могу придумать, как сделать это с самого начала. Возможно, вам придется прибегнуть к использованию метода, отличного от регулярных выражений (что совсем не сложно в Python)
5. хорошо, извините, ребята, я думаю, что я могу ошибаться с самого начала, этот язык L получен мной из грамматики , так что, возможно, это говорит о том, что если сложно использовать регулярное выражение для некоторого шаблона, грамматика может это сделать.
Ответ №1:
Если вам разрешено, я рекомендую простой подход рекурсивного спуска.
Вы можете удалять aa
спереди и b
сзади одновременно.
def foo(s):
if s == "":
return True
if s.startswith('aa') and s.endswith('b'):
return foo(s[2:-1])
else:
return False