首页 > 解决方案 > 正则表达式与 python 中的预期输出不匹配

问题描述

在编写一个程序来检测二进制中的重复模式时,我遇到了一个奇怪的实例,其中正则表达式似乎在 python 中没有正确匹配。

正则表达式运行如下:

pattern = re.compile("^0b(1*)(0*)(\1\2)*(\1)?$")
result = pattern.match("0b101")

我希望看到的是以下匹配组:

但相反,我根本没有比赛。根据网站 regex101 的匹配应该符合预期,但 python 似乎不同意。

python中的解释器和网站之间是否有区别,或者只是我遗漏了一些小错误?

标签: pythonregex

解决方案


和网站

我假设您使用 regex101 之类的网站之一创建了您的正则表达式,对吗?

如果您仔细观察,regex101,它暗示它使用原始字符串。

在你的情况下:

pattern = re.compile("^0b(1*)(0*)(\1\2)*(\1)?$")

Python 试图解释\1为正常的转义序列——比如\n等。

您需要的是\,字符串解析后,正则表达式解析器可以解析。

这意味着,转义反斜杠 -\\或使用原始字符串,以便 Python 知道它不应该解析任何\ns 和类似的。

pattern = re.compile(r"^0b(1*)(0*)(\1\2)*(\1)?$")

推荐阅读