用于匹配德国邮政编码的正则表达式,但不是
Posted
技术标签:
【中文标题】用于匹配德国邮政编码的正则表达式,但不是【英文标题】:regex for matching german postal codes but not a 【发布时间】:2011-02-19 00:30:53 【问题描述】:以下字符串:
23434 5465434
58495 / 46949345
58495 - 46949345
58495 / 55643
d 44444 ssdfsdf
64784
45643 dfgh
58495/55643
48593/48309596
675643235
34565435 34545
它只想提取粗体。它是一个五位数的数字(德语)。
它不应与我上面的示例中的电话号码 43564 366334
或 45433 / 45663
等匹配。
我尝试了^\b\d5
之类的方法,但这不是一个好的开始。
有一些提示可以帮助我完成这项工作吗?
感谢所有提示
【问题讨论】:
请添加更多信息以说明为什么某些 5 位数字可以接受而其他数字不可接受。它们是特定范围吗?有具体的格式吗?您提供的信息越多,人们可以提供的答案就越好。事实上,人们不得不猜测你想要什么。 【参考方案1】:您可以添加否定的前瞻断言以避免与电话号码匹配。
\b[0124678][0-9]4\b(?!\s?[ \/-]\s?[0-9]+)
如果您使用的是 Ruby 1.9,您也可以添加否定的后视断言。
【讨论】:
听起来就是这样。上面的 (?!...) 部分正在向前看,如果满足 ... 条件,则拒绝匹配。在 Ruby 1.9 中,我们可以使用 (? 我看到这个正则表达式在很多地方浮动,但它不正确。问题是任何以 3、5 或 9 开头的德国邮政编码都被视为无效,尽管它们完全有效并且也被使用。另见en.wikipedia.org/wiki/List_of_postal_codes_in_Germany【参考方案2】:您尚未指定您要搜索的号码的区别。
根据您提供的示例字符串,您似乎只想:
^(\d5)\n
匹配以 5 位数字开头且不包含其他内容的行。
您可能希望在前 5 位数字之后允许一些空格(但不要其他):
^(\d5)\s*\n
【讨论】:
【参考方案3】:我不完全确定指定的规则。但是,如果您想要以 5 位数字开头且不包含其他数字的行,这可能会起作用:
^(\d5)[^\d]*$
如果前导空格没问题,那么:
^\s*(\d5)[^\d]*$
这是显示结果的Rubular link。
【讨论】:
看起来很有希望,但我不想在第二场比赛中匹配字符,d 44444 ssdfsdf
也应该匹配 =/ 非常复杂【参考方案4】:
^\D*(\d5)(\s(\D)*$|()$)
这应该(未经测试)匹配:
以五位数字(或一些非数字然后是五位数字)开头的行,然后 一个空格,并以一些非数字结尾 以 5 开头和结尾的行 数字(或一些非数字,然后是五位数字)\1 将是五位数字
\2 将是整个下半场,如果有的话
\3 将是数字之后的单词,如果有的话
编辑以适合提问者编辑的问题
再次编辑:我想出了一个更优雅的解决方案:
^\D*(\d5)\D*$
【讨论】:
也是一个好的开始。但它也匹配字符,如果该行以其他字符开头然后是数字(检查编辑)你的匹配项 => rubular.com/r/9FUAYtkP4X 其实我只是想出了一个更好的解决方案。检查帖子。 嗯,对不起。不适合我,因为它包括字符。空格没问题,但字符是。 老实说,您将不得不更加具体。没有人知道你所说的“字符”是什么意思。它们都是所有个字符。以上是关于用于匹配德国邮政编码的正则表达式,但不是的主要内容,如果未能解决你的问题,请参考以下文章