python - 正则表达式与 python 中的预期输出不匹配
问题描述
在编写一个程序来检测二进制中的重复模式时,我遇到了一个奇怪的实例,其中正则表达式似乎在 python 中没有正确匹配。
正则表达式运行如下:
pattern = re.compile("^0b(1*)(0*)(\1\2)*(\1)?$")
result = pattern.match("0b101")
我希望看到的是以下匹配组:
- 1:'1'
- 2:'0'
- 3:空的
- 4:'1'
但相反,我根本没有比赛。根据网站 regex101 的匹配应该符合预期,但 python 似乎不同意。
python中的解释器和网站之间是否有区别,或者只是我遗漏了一些小错误?
解决方案
和网站
我假设您使用 regex101 之类的网站之一创建了您的正则表达式,对吗?
如果您仔细观察,regex101,它暗示它使用原始字符串。
在你的情况下:
pattern = re.compile("^0b(1*)(0*)(\1\2)*(\1)?$")
Python 试图解释\1
为正常的转义序列——比如\n
等。
您需要的是\
,字符串解析后,正则表达式解析器可以解析。
这意味着,转义反斜杠 -\\
或使用原始字符串,以便 Python 知道它不应该解析任何\n
s 和类似的。
pattern = re.compile(r"^0b(1*)(0*)(\1\2)*(\1)?$")
推荐阅读
- python - PySNMP 缺少文件
- python - Django 提示:发生服务器错误。请联系管理员
- javascript - 我可以得到一个对象,但不是它在 JS 中的属性
- mysql - 将 MySQL 中的一个单元格分配给多个记录
- javascript - 如何解决这个错误 JSONEditor is not defined ESlint
- javascript - 与另一个变量 jquery 相比,DropDownList 中的突出显示或粗体选项
- android - 在调用返回 Single 的 API 后返回字符串的 Observable
- java - 子模块的父 POM 依赖树发现 (Maven)
- java - 如何将参数标记动态传递给 JSTL 查询?
- c# - 如何在 C# 中使用 XML Tree 的可用结构构建 XML Tree