我正在尝试构建邮政信箱验证器。我已经在几个站点上测试了正则表达式,所以我知道它可以工作。但是由于某种原因,我无法使其在python中工作。
m = re.compile('/\b(?:p\.?\s*o\.?|post\s+office)(\s+)?(?:box|[0-9]*)?\b/gi')
print(m.match('PO BOX'))
答案 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'>