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

regex conflict phone number and postal code

我想从文本块中提取邮政编码。 我的邮政编码长六位,可以是 560011560 011。我使用了正则表达式 (/[0-9]{3}[ ]?[0-9]{3}/),但这也捕获了我的 phone 号码的前 6 位数字。我尝试在我的 6th 数字后使用 [^0-9],但这也捕获了下一个字符。我怎样才能只捕获邮政编码,而忽略任何超过 6 位数字的数字?

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

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

/\b\d{3} ?\d{3}\b/

如果您的正则表达式风格支持 数字 字符 class.

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

此外,让一个字符 class 只有一个字符([ ])没有任何意义。这与正则表达式中的字符相同。

See it here at regex101.

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

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

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