我有以下正则表达式,但它不能满足我的要求。
"(?i)\b(?:p(?:ost)?\.?\s*[o0](?:ffice)?\.?\s*b(?:[o0]x)?|b[o0]x)"
123 post office
123 post office box
post office
po box
po 12 box
35 po box
PO.Box
p.o.box
以上示例使用我当前的正则表达式失败
答案 0 :(得分:1)
如果您知道输入是邮局信箱,请先尝试过滤掉任何文本,然后只使用其中的数字。或者,只需将字符串小写,然后剥去字母p,o,s,t,f,i,c,e,b,x,然后如果剩下任何字母,那就不好了。
答案 1 :(得分:1)
对于邮政信箱,您会发现无法涵盖所有案例。这显然是你可能不想听的东西,但主题是休息。当一个人开始谷歌搜索解决方案时,这是非常明显的,因为相信我,我调查了这个,有很多解决方案。我见过的所有解决方案,我都不太在意。
所以你必须回到邮政信箱地址所包含的规则/标准。人们可以在维基百科上找到它。它的格式为PO Box,P.O。 Box,Postal Office Box,P Office Box,Postal Box,Post Box,仅举几个标准格式的例子,在编写正则表达式时,根据他/她的规则确定地址是否为邮政信箱。 / p>
话虽如此,这是我的解决方案。它很简单,因为它必须是,用户放入po box的方式太多了。而你必须假设p或邮政或p开始po盒的地址。这样,您就不会过滤具有123 po地址格式的单词p或o的某些变体的地址。我希望这是有道理的。
/^p+(ostal|ost|\.| )*o*(ffice|\.| )*(box)*/i
以上内容可以在http://www.rubular.com上进行测试,你需要删除开始和结束正斜杠,然后将i(不区分大小写在块中的文本字段放在结束正斜杠的右侧)。
答案 2 :(得分:0)
不确定过滤“邮局”是多么准确,没有“邮箱”跟随它。 正则表达式满足除列表中“123邮局”和“邮局”之外的所有条件。
@"\bp*[o0]*(st)*(al)*\.*\s*[o0]*(ffice)*\.*\s*b+[o0]?x+\b"
如果您将"b+[o0]?x+"
更改为"(b+[o0]?x+)*"
,它也会过滤这些内容。
希望这有帮助。