Python RegEx没有返回正确的值。不知道我在哪里错

时间:2018-10-12 11:07:34

标签: python regex python-3.x

我正在尝试构建邮政信箱验证器。我已经在几个站点上测试了正则表达式,所以我知道它可以工作。但是由于某种原因,我无法使其在python中工作。

m = re.compile('/\b(?:p\.?\s*o\.?|post\s+office)(\s+)?(?:box|[0-9]*)?\b/gi')
print(m.match('PO BOX'))

1 个答案:

答案 0 :(得分:2)

您可能已经在类似sed的引擎上尝试过表达式,但是python正则表达式不是以/开头,除非您想匹配/

您的表达式以/开头,而您尝试匹配(而不是 search PO,因此就永远无法匹配,永远

最后/gi也一样(但是您必须将re.IGNORECASE设置为正则表达式标志)。

另一个问题是\b需要转义(否则将其解释为退格)。

使用原始字符串前缀可以避免显式转义。至少对PO BOX字符串有效:

m =re.compile(r'\b(?:p\.?\s*o\.?|post\s+office)(\s+)?(?:box|[0-9]*)?\b',flags=re.IGNORECASE)
print(m.match("PO BOX"))

打印:

<_sre.SRE_Match object; span=(0, 6), match='PO BOX'>