正则表达式冲突电话号码和邮政编码
Posted
技术标签:
【中文标题】正则表达式冲突电话号码和邮政编码【英文标题】:regex conflict phone number and postal code 【发布时间】:2016-09-01 05:49:51 【问题描述】:我想从一串文本中提取邮政编码。
我的邮政编码是六位数,可以是560011
或560 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。
【讨论】:
以上是关于正则表达式冲突电话号码和邮政编码的主要内容,如果未能解决你的问题,请参考以下文章