PO Box正则表达式有助于匹配尾随数字

时间:2012-05-29 18:43:17

标签: regex

我有来自正则表达式lib的以下正则表达式,可以很好地捕获一些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 个答案:

答案 0 :(得分:3)

假设“邮政信箱123”中的尾随数字为“123”,则正则表达式确实匹配它们。它甚至可以捕获反向引用的数字3。

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

我可能会建议我自己的P.O. Box regex?

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

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

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

  • 邮政信箱#123
  • 邮箱123
  • P.O。方框123
  • P O Box 123
  • 宝。方框123
  • 邮政信箱123
  • Box 123

将跟踪数字捕获到反向引用1.

答案 1 :(得分:1)

\d+ =一个或多个数字,你在那里。使用http://regexpal.com/,它可以节省生命。我尝试了邮政信箱2334328789791297,并采取了它,以及其他一些变化。你的代码看起来很好(乍一看)。

答案 2 :(得分:0)

我从@ slevithan的上述答案开始工作,并添加了一些改进,但作为编辑被拒绝了:

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

除了匹配上述情况外,它还将允许更多空格,或者缺少空格以及邮政/邮政的短期和完整排列。字母也可以用于盒子标识符。警告:确保在模式上启用多行和不区分大小写的模式。

enter image description here

答案 3 :(得分:0)

我为处理邮政信箱验证而创建的模式将处理 Po box 的任意组合,并且还会处理尾随数字,字符和数字。

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

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

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

注意:如果你只需要PO bOx而不是尾随序列,只需从末尾删除。*就可以解决这个问题。我假设上限为PO盒。