匹配德国邮政编码的正则表达式,但不是

时间:2011-02-19 00:30:54

标签: ruby regex postal-code

以下字符串:

  

23434 5465434

     

58495/46949345

     

58495 - 46949345

     

58495/55643

     

d 44444 ssdfsdf

     

64784

     

45643 dfgh

     

55643分之58495

     

四千八百三十〇万九千五百九十六分之四万八千五百九十三

     

675643235

     

34565435 34545

它只想提取粗体。它是一个五位数字(德语)。 它不应与电话号码43564 36633445433 / 45663等匹配,如上例所示。

我试过像^\b\d{5}这样的东西,但这不是一个好的开始。

有些提示让我能够正常工作吗?

感谢所有提示

5 个答案:

答案 0 :(得分:2)

您可以添加一个负面的预测断言,以避免与电话号码匹配。

\b[0124678][0-9]{4}\b(?!\s?[ \/-]\s?[0-9]+)

如果你使用的是Ruby 1.9,你也可以添加一个负面的后视断言。

答案 1 :(得分:1)

您尚未指定区分您尝试搜索的号码。

根据您提供的示例字符串,看起来您只需要: ^(\d{5})\n

匹配以5位数字开头且不包含任何其他内容的行。

您可能希望在前5位数之后允许一些空格(但没有其他内容): ^(\d{5})\s*\n

答案 2 :(得分:1)

这是德国邮政编码(Source

的正则表达式
^([0124678][0-9]{4})$

答案 3 :(得分:0)

我不完全确定指定的规则。但是如果你想要以5位数字开头并且不包含其他数字的行,这可能有效:

^(\d{5})[^\d]*$

如果领先的空白区域没问题,那么:

^\s*(\d{5})[^\d]*$

以下是显示结果的Rubular link

答案 4 :(得分:0)

^\D*(\d{5})(\s(\D)*$|()$)

这应该(未经测试)匹配:

  • 以五位数字(或一些非数字然后五位数)开头,然后 一个空格,以一些非数字结尾
  • 以五行开头和结尾 数字(或一些非数字然后五位数)

\ 1将是五位数

\ 2将是整个下半场,如果有的话

\ 3将是数字后的单词,如果有的话

编辑以适应提问者的编辑问题

再次编辑:我提出了一个更优雅的解决方案:

^\D*(\d{5})\D*$