python - 正则表达式中边界 \b 的问题
问题描述
目标:使用正则表达式,(不拆分)我想取一串数字,只返回“格式正确”的数字。我将“格式正确”定义为每三个数字必须以逗号开头。
我的代码:
import re
numRegex = re.compile(r'\b\d{1,3}(?:,\d{3})*\b')
print(numRegex.findall('42 1,234 6,368,745 12,34,567 1234'))
当我运行代码时,我希望得到:
['42', '1,234', '6,368,745']
相反,我回来了:
['42', '1,234', '6,368',745', '12', '34,567']
我猜它会将逗号 (,) 视为边界 (\b),但我不确定如何优雅地解决这个问题。
仅供参考:这个例子是对“用 Python 自动化无聊的东西:初学者的实用编程”中的问题问题的改编。示例问题仅要求使用正则表达式来确定单个数字的格式是否正确,并且不希望您从多个数字的长字符串中解析出所有“格式正确”的数字。我最初误解了这个问题,现在我的任务是以这种方式完成它。
解决方案
尝试消极的环顾四周:
numRegex = re.compile(r'\b\d{1,3}(?:,\d{3})*\b(?!,)')
有一个前瞻断言(?!,)
,因此右侧的边界不能跟逗号。
类似地,您可以有后向断言,要求匹配的文本前面不能有逗号:
numRegex = re.compile(r'(?<!,)\b\d{1,3}(?:,\d{3})*\b(?!,)')
这样,当“数字”的两边都有逗号时,它将不会被匹配。
推荐阅读
- ansible - 在角色中更改主机
- streaming - 从 Zoom 会议捕获实时音频流
- kubernetes - 在 Kubernetes 中配置 Keycloak 以使用多个领域
- magento2 - 在 Magento 2 中看不到选项以访客身份签出或登录
- powershell - 如何从使用 Powershell 的 WebBinding 获取网站名称?
- ruby-on-rails - 我是否需要检查 Rails 的 belongs_to 关联中是否存在记录?
- python - 如何在列表中找到字典的索引?(对不起,如果我没有使用正确的语言,我对此很陌生)
- django - 找不到 Django 管理员 /img
- terraform - 来自 aws_eks_cluster_auth 的令牌无效
- c# - 端到端测试中遗留应用程序的代码覆盖率