python re.sub - альтернативные шаблоны замены

Я хочу предоставить альтернативные шаблоны замены для re.sub.

Допустим, у меня есть две модели поиска в качестве альтернативы, например:

re.sub(r"[A-Z]+|[a-z]+", replacementpattern, string)

и вместо того, чтобы предоставить один шаблон замены, я хотел бы каким-то образом определить, какой альтернативный шаблон поиска был найден, и предоставить альтернативные шаблоны замены. Это возможно? Благодарю.

PS. Специфика кода здесь не имеет значения, это общий вопрос.

 user296547312 июн. 2016 г., 19:30
Мне известны параметры группировки в шаблонах поиска и затем использование \ number reference в шаблоне замены. Что я хочу сделать, это: если группа \ 1 была сопоставлена, то заменить строку на «а», если группа \ 2, то заменить на «б».
 spectras12 июн. 2016 г., 19:12
Да, это. Прочитайте документацию регулярного выражения. Вы ищете захват скобок.
 smci21 июл. 2019 г., 00:53
помеченныйЗахват-группа обратная ссылка, так как это то, что ваш вопрос о

Ответы на вопрос(1)

Решение Вопроса

Вы можете передать функциюre.sub(), В функции вы можете вернуть необходимое значение на основе захваченной группы. Простой код для иллюстрации:

>>> def fun(m):
...   if m:
...     if m.group(1):
...        return 'x'
...     else:
...        return 'y'


>>>print re.sub(r"([A-Z]+)|([a-z]+)", fun , "ab")

Функцияfun() проверяет, успешно ли найдено совпадение и на основе захваченной группы, возвращает строку замены. Если[A-Z]+ было подобрано,x это замена строки еще[a-z]+ было подобрано иy является строкой замены.

Для дополнительной информации :доктор

 user296547312 июн. 2016 г., 22:01
это прекрасно, спасибо!

Ваш ответ на вопрос