#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
возвращает все такие совпадения в списке.