Регулярное выражение для поиска строки с повторяющимися буквами в конце

#python #regex #string #loops #iterator

#python #регулярное выражение #строка #циклы #итератор

Вопрос:

Может ли кто-нибудь помочь мне с таким сопоставлением регулярных выражений?

Например, я просматриваю список, содержащий разные строки с буквой, повторяющейся в конце строки:

  • МонстерА
  • MonsterB
  • MonsterC
  • HeroA
  • HeroB
  • HeroC

Мне нужно, чтобы этот скрипт возвращал только предыдущую часть строки, в этом примере Monster и Hero .

Комментарии:

1. Опубликуйте пример списка, он разделен запятой, разделен новой строкой? Они в порядке? В конце таких строк может быть только одна буква?

2. Вам обязательно нужно регулярное выражение? В противном случае word[:-1] будет работать

Ответ №1:

Если вам абсолютно необходимо регулярное выражение:

 re.match(r"(.*)[A-Z]", word).group(1)
  

Но это не самый эффективный способ, если вы просто хотите удалить последний символ.

Ответ №2:

Вы могли бы использовать положительное прогнозное утверждение (?=...) , чтобы проверить, что слова заканчиваются одним символом верхнего регистра, а затем использовать word boudaries b...b , чтобы убедиться, что оно не соответствует шаблонам, которые не являются целыми словами:

 >>> text = "This re will match MonsterA and HeroB but not heroC or MonsterCC"
>>> re.findall(r"b[A-Z][a-z] (?=[A-Z]b)", text)
['Monster', 'Hero'] 
  

re.findall возвращает все такие совпадения в списке.