命名组中的非捕获组

时间:2019-04-18 12:22:41

标签: python regex regex-group

我想用前缀或后缀匹配字符串集合之一

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。也许我可以与此一起使用超前或后向运算符?

我不能使用(?J)修饰符作为我正在使用的正则表达式引擎(python re模块不支持此修饰符。

1 个答案:

答案 0 :(得分:1)

我无法在命名组中使用非捕获组,但是至少这可以正确地将red提取为group('color')

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