我正在尝试按如下方式进行模式匹配以识别错误行
1234:20561 - 不应该匹配
1234:3456778:你好 - 应该匹配
2345:3455667: - 应匹配
没有数据 - 应该匹配
我试图使用此re.match('[0-9*:?0-9*:a-z]', string)
但无法使其正常工作。
我该怎么做?
答案 0 :(得分:0)
您似乎需要将re.match
与以下正则表达式一起使用:
^(?:[0-9]+:[0-9]+:[a-z]*)?$
请参阅Why is “using namespace std” considered bad practice?(使用re.match
,^
是可选的。)
<强>详情:
^
- 字符串的开头(re.match
在字符串start处锚定模式,然后可以省略)(?:
- 启动非捕获组
[0-9]+
- 1+位数:
- 冒号[0-9]+
- 1+位数:
- 冒号[a-z]*
- 0+ ASCII字母(小写))?
- 非捕获组的结束,?
量词使其匹配1或0次(使其成为可选)$
- 字符串结束。import re
ss = [ '1234:20561', '1234:3456778:hello', '2345:3455667:', '']
rx = re.compile(r'^(?:[0-9]+:[0-9]+:[a-z]*)?$')
for s in ss:
if rx.match(s):
print("{} matched.".format(s))
输出:
1234:3456778:hello matched.
2345:3455667: matched.
matched.