python模式匹配以匹配异常

时间:2017-04-27 23:51:42

标签: python regex pattern-matching

我正在尝试按如下方式进行模式匹配以识别错误行

1234:20561 - 不应该匹配

1234:3456778:你好 - 应该匹配

2345:3455667: - 应匹配

没有数据 - 应该匹配

我试图使用此re.match('[0-9*:?0-9*:a-z]', string)但无法使其正常工作。

我该怎么做?

1 个答案:

答案 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次(使其成为可选)
  • $ - 字符串结束。

regex demo

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.