python-3.x - python中需要的正则表达式帮助
问题描述
任何人都可以帮助我形成一个正则表达式来将模式识别dd-ddd
为一个句子中的一个完整单词,例如在这样的句子中 -
11-222
应该在句子的开头匹配,33-444
在中间也应该匹配,但不是55-66-777
因为整个单词与模式不匹配。如果模式出现在最后,那也应该像这样匹配88-999
如果我使用像它这样的正则表达式,'\b\d{2}-\d{3}\b'
它甚至可以匹配. 我需要排除它。不知何故, - (连字符)被视为单词的边界。66-777
55-66-777
知道如何实现这一目标吗?
添加了示例代码和输出
import re
regex_str = r'\b\d{2}-\d{3}\b'
msg_message = '11-222 should be matched, as well as 33-444 but not 55-66-777. If it is present at the end, that should also be matched like 88-999'
for match in re.finditer(regex_str, msg_message):
print('*'*15)
print(match.group(0))
print(match.span())
O/p
***************
11-222
(0, 6)
***************
33-444
(37, 43)
***************
66-777
(55, 61)
***************
88-999
(125, 131)
解决方案
您可以使用(?<!\S)\d{2}-\d{3}(?!\S)
. 这种模式确保前后都有一个空白字符(或没有字符 - 即字符串的开始/结束)。
这个怎么运作:
(?<!\S)
确保前面的内容不匹配非空白字符\d{2}
匹配两位数-
从字面上匹配这个字符\d{3}
匹配三位数字(?!\S)
确保后面的内容与非空白字符不匹配
双重否定是故意使用的。另一种方法是分别使用(?<=\s|^)
和(?=\s|$)
(但它更长,更不性感)。
推荐阅读
- android - 带有复选框的警报对话框
- javascript - ./src/Components/ContactForm.jsx 第 37 行:'sendEmail' 未定义 no-undef
- kubernetes - calico-kube-controllers 和 calico-node 未准备好 (CrashLoopBackOff)
- java - criteriaBuilder.greaterThanOrEqualTo 比较没有时间的日期
- javascript - 当用户完成绘制多边形时如何监听事件?
- c# - 接受 ASP.NET 端点中的 int 或对象
- reactjs - 获取删除请求返回:未处理的拒绝(TypeError):无法在“窗口”上执行“获取”:在无 Cors 模式下不支持“删除”
- azure - 如何检查端口是否打开?
- python - 合并熊猫数据框的列差异
- javascript - 在vuetify中切换组件时如何检查所有复选框?