我有以下来自正则表达式库的正则表达式,它可以很好地捕捉一些 PO Box 变体。它唯一不做的是匹配尾随数字:
邮政信箱 123
任何人都可以帮忙修改这个正则表达式以匹配尾随数字吗?
\b[P|p]?(OST|ost)?\.?\s*[O|o|0]?(ffice|FFICE)?\.?\s*[B|b][O|o|0]?[X|x]?\.?\s+[#]?(\d+)\b
谢谢。
我有以下来自正则表达式库的正则表达式,它可以很好地捕捉一些 PO Box 变体。它唯一不做的是匹配尾随数字:
邮政信箱 123
任何人都可以帮忙修改这个正则表达式以匹配尾随数字吗?
\b[P|p]?(OST|ost)?\.?\s*[O|o|0]?(ffice|FFICE)?\.?\s*[B|b][O|o|0]?[X|x]?\.?\s+[#]?(\d+)\b
谢谢。
假设“PO Box 123”中的尾随数字是“123”,则正则表达式确实匹配它们。它甚至将数字捕获到反向引用 3。
您的正则表达式存在大量缺陷。例如,它匹配OST|||| 0
.
我可以建议我自己的邮政信箱正则表达式吗?
^(?:Post (?:Office )?|P[. ]?O\.? )?Box #?([0-9]+)
启用在换行符处生成^
和匹配的选项(通常为),并启用不区分大小写的选项(通常为)。不要启用自由间距选项(通常是)。$
/m
/i
/x
以下是它匹配的一些字符串示例:
尾随数字被捕获到反向引用 1。
\d+
=一个或多个数字,你在那里。使用http://regexpal.com/,这是一个救生员。我尝试了 PO Box 2334328789791297 并接受了它,以及其他一些变体。您的代码看起来不错(一目了然)。
我从上面的@slevthan's answer工作并添加了一些改进,这些改进被拒绝为编辑:
(^|(?:post(al)? *(?:office *)?|p[. ]*o\.? *))box *#? *(\w+)
除了匹配上述情况外,它还允许在两者之间有更多的空格,或者缺少空格,以及 post/postal 的短排列和全排列。字母也可以用于盒子标识符。警告:一定要在模式上启用多行和不区分大小写的模式。
我创建的用于处理邮政信箱验证的模式将处理邮政信箱的任何组合,还将处理尾随数字、字符和数字。
模式 pattern = Pattern.compile("([P]?(OST|0ST)?\s*[.-]?\s*[O|0]?(FFICE)?\s*[.-]?\s *[B][O|0][X]\s*).*");
它对我来说很好用。我已经用多种组合对其进行了测试。
如果您发现其中有任何问题,请告诉我。
注意:如果您只需要 PO bOx 而不是尾随序列,只需从末尾删除 .* 即可解决该目的。我假设邮政信箱位于大写字母中。