как я могу заставить две подгруппы появляться одинаковое количество раз, используя регулярное выражение?

#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