正则表达式冲突电话号码和邮政编码

Posted

技术标签:

【中文标题】正则表达式冲突电话号码和邮政编码【英文标题】:regex conflict phone number and postal code 【发布时间】:2016-09-01 05:49:51 【问题描述】:

我想从一串文本中提取邮政编码。 我的邮政编码是六位数,可以是560011560 011。我使用了正则表达式 (/[0-9]3[ ]?[0-9]3/),但这也捕获了我电话号码的前 6 位数字。我尝试在第 6th 位之后使用 [^0-9],但这也捕获了下一个字符。如何仅捕获邮政编码,而忽略任何超过 6 位的数字?

【问题讨论】:

你使用什么语言? 【参考方案1】:

我认为您的解决方案是添加单词边界。喜欢

/\b[0-9]3 ?[0-9]3\b/

/\b\d3 ?\d3\b/

如果您的正则表达式支持 digit 字符类。

单词边界 - \b 仅在它之前和之后的字符是来自不同的类时匹配,或者更确切地说 - 一个是 word 字符类,并且另一个不是。 word 字符类 包含数字,因此在您的正则表达式之前和之后添加\b,使其仅在数字前后是非数字时才匹配(word 字符 )。

另外,只有一个字符([ ])的字符类没有任何意义。这与在正则表达式中包含字符相同。

See it here at regex101.

【讨论】:

谢谢!正是我需要的。【参考方案2】:

您可以使用括号捕获前六个数字,忽略后面的非数字:

/([0-9]3 ?[0-9]3)[^0-9]/

这匹配 123456 和 123 456,但不匹配 1234567。

【讨论】:

以上是关于正则表达式冲突电话号码和邮政编码的主要内容,如果未能解决你的问题,请参考以下文章

php正则表达式验证(邮件地址Url地址电话号码邮政编码)

正则表达式

Java 通用正则表达式

常用正则表达式

js正则表达式 验证手机号,email地址和邮政编码

java中身份*号正则表达式