Группы без захвата внутри именованных групп - PullRequest
1 голос
/ 18 апреля 2019

Я хочу сопоставить одну из коллекции строк с префиксом или суффиксом, например,

the color is red red is the color

Я хочу сопоставить группы color: red

Итак, моей первой попыткой было очевидное

(?<color>(?:the color is )(red|green|blue)|(red|green|blue)(?: is the color))

Я ожидал, что это будет соответствовать одной группе color: red, но это соответствует color: the color is red, 2: red

Я также пыталсяс помощью (?>) атомарного оператора

Я попытался переместить группы префиксов / суффиксов за пределы именованной группы:

(?:the color is )(?<color>red|green|blue)(?: is the color)

Но это будет соответствовать только строкам спрефикс и суффикс, например the color is red is the color.Может быть, я мог бы использовать операторы lookahead или lookbehind с этим?

Я не могу использовать модификатор (?J) в качестве используемого мной механизма регулярных выражений (модуль python re не поддерживает это.

1 Ответ

1 голос
/ 18 апреля 2019

Мне не удалось использовать группы без записи внутри именованных групп, но по крайней мере это правильно извлекает red как group('color'):

m = re.search(r"(?P<color>((red|green|blue)(?= is the color)|(?<=the color is )(red|green|blue)))", t)
...