【发布时间】:2020-08-20 16:31:25
【问题描述】:
谁能帮我形成一个正则表达式来将模式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) -
其实也可以出现在句首,所以前面的空格是不行的。字符串结尾也一样。
标签: python-3.x regex