#python #regex #pattern-matching
#python #регулярное выражение #сопоставление с шаблоном
Вопрос:
Как я могу сопоставить что-то вроде, за "AB|CD|EF"
чем следует "12|34"
, и получить, например, "AB12"
обратно? Если бы строка была, "zzAB34zz"
я бы получал "AB34"
, "zzABCD12"
и получал "CD12"
и т.д.?
Ответ №1:
На самом деле здесь нет необходимости в именованных группах:
import re
re.search('(AB|CD|EF)(12|34)', 'zzAB34zz').group()
Ответ №2:
Используйте круглые скобки для захвата:
import re
r = re.compile(r'(?P<stuff>(AB|CD|EF)(12|34))')
r.findall('__ABCD12__EF34__')
#[('CD12', 'CD', '12'), ('EF34', 'EF', '34')]
r.search('__ABCD12__EF34__').group('stuff')
#'CD12'
Именованные круглые скобки (?P<name>...)
могут помочь избежать раздражающей индексации.
Ответ №3:
import re ; "".join(re.compile("(AB|CD|EF)(12|34)").search("zAB12z").groups())
выводит:
'AB12'