我想用前缀或后缀匹配字符串集合之一
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
模块不支持此修饰符。
答案 0 :(得分:1)
我无法在命名组中使用非捕获组,但是至少这可以正确地将red
提取为group('color')
:
m = re.search(r"(?P<color>((red|green|blue)(?= is the color)|(?<=the color is )(red|green|blue)))", t)