这个问题是关于如何(以及最终为什么)python在编译正则表达式语句时包含十六进制转义符。
正则表达式声明(简化)如下:
my_regex = re.compile('^((?:([bye])(?!.*\2)){3})$', re.MULTILINE)
我希望这能找到字母' b',' y'和' e'的所有组合。 (例如' bye',' yeb',' eyb')。然而,它找到了所有的排列,即“#by byy' ' BBY' ' BBB'等
我终于发现python正在将上面的表达式转换为:
my_regex = re.compile('^((?:([bye])(?!.*\x02)){3})$', re.MULTILINE)
差别很小,
\2
与
\x02
但足以导致结果包含重复的字母。
如何阻止python在正则表达式语句中包含十六进制转义符?为什么把它放在那里?此外,为什么十六进制转义导致重复的字母匹配,否则它们不会?