0

我有以下来自正则表达式库的正则表达式,它可以很好地捕捉一些 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

谢谢。

4

4 回答 4

3

假设“PO Box 123”中的尾随数字是“123”,则正则表达式确实匹配它们。它甚至将数字捕获到反向引用 3。

您的正则表达式存在大量缺陷。例如,它匹配OST|||| 0.

我可以建议我自己的邮政信箱正则表达式吗?

^(?:Post (?:Office )?|P[. ]?O\.? )?Box #?([0-9]+)

启用在换行符处生成^和匹配的选项(通常为),并启用不区分大小写的选项(通常为)。不要启用自由间距选项(通常是)。$/m/i/x

以下是它匹配的一些字符串示例:

  • 邮政信箱 #123
  • 邮政信箱 123
  • 邮政信箱 123
  • 邮政信箱 123
  • 宝。框 123
  • 邮政信箱 123
  • 框 123

尾随数字被捕获到反向引用 1。

于 2012-05-29T18:58:55.587 回答
1

\d+=一个或多个数字,你在那里。使用http://regexpal.com/,这是一个救生员。我尝试了 PO Box 2334328789791297 并接受了它,以及其他一些变体。您的代码看起来不错(一目了然)。

于 2012-05-29T18:51:24.190 回答
0

我从上面的@slevthan's answer工作并添加了一些改进,这些改进被拒绝为编辑:

 (^|(?:post(al)? *(?:office *)?|p[. ]*o\.? *))box *#? *(\w+)

除了匹配上述情况外,它还允许在两者之间有更多的空格,或者缺少空格,以及 post/postal 的短排列和全排列。字母也可以用于盒子标识符。警告:一定要在模式上启用多行和不区分大小写的模式。

在此处输入图像描述

于 2013-03-30T00:03:18.940 回答
0

我创建的用于处理邮政信箱验证的模式将处理邮政信箱的任何组合,还将处理尾随数字、字符和数字。

模式 pattern = Pattern.compile("([P]?(OST|0ST)?\s*[.-]?\s*[O|0]?(FFICE)?\s*[.-]?\s *[B][O|0][X]\s*).*");

它对我来说很好用。我已经用多种组合对其进行了测试。

如果您发现其中有任何问题,请告诉我。

注意:如果您只需要 PO bOx 而不是尾随序列,只需从末尾删除 .* 即可解决该目的。我假设邮政信箱位于大写字母中。

于 2013-10-23T13:21:49.780 回答