Как использовать групповое дополнение в Python?

#python #regex

#python #регулярное выражение

Вопрос:

Я ищу что-то подобное r"[^1]" в Python. Например, я хочу сопоставить такие слова, как «привет», в тексте, где каждая буква была заменена другой (например: «a» на «z«, «b» на «r«, …). «привет» может быть «zcuuj», «prvva», … Я хочу сказать Python: «найди мне слово, которое начинается с [a-z] , затем букву, не похожую на первую, затем те же две буквы, затем букву, которая отличается от остальных.

Я пробовал этот шаблон:

 r"([a-z])([^1])([^12]){2}([^123])"
  

(не работает)

Этот:

 r"([a-z])((?!1))((?!1|2)){2}((?!1|2|3])"
  

(не работает)

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

1. Что не работает? Какую ошибку вы получаете?

Ответ №1:

Попробуйте это здесь

 ^([a-z])(?!1)([a-z])(?!(?:1|2))(([a-z])4)(?!(?:1|2|4))[a-z]
  

Я протестировал его онлайн здесь, на rubular

Проблема с вашим вторым примером заключается в том, что отрицательное прогнозное утверждение не потребляет. Это означает, что вам нужно использовать символы после того, как вы их проверили. Я делаю это здесь после каждого просмотра с . и ссылками.

Проблема с вашим первым примером заключается в том, что вы не можете поместить эти ссылки в группы символов.

ОБНОВЛЕНИЕ: Я обновил свое регулярное выражение и ссылку rubular, потому что в первой версии разрешались другие символы, чем [a-z] после первого.

Ответ №2:

Согласно документации, которую вы можете использовать (?P<name>...) для создания именованной группы, на которую вы можете позже ссылаться с помощью (?P=name) .