正则表达式冲突 phone 号码和邮政编码
regex conflict phone number and postal code
我想从文本块中提取邮政编码。
我的邮政编码长六位,可以是 560011
或 560 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 只有一个字符([ ]
)没有任何意义。这与正则表达式中的字符相同。
您可以使用括号来捕获前六个数字,忽略后面的非数字:
/([0-9]{3} ?[0-9]{3})[^0-9]/
这匹配 123456 和 123 456 但不匹配 1234567。
我想从文本块中提取邮政编码。
我的邮政编码长六位,可以是 560011
或 560 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 只有一个字符([ ]
)没有任何意义。这与正则表达式中的字符相同。
您可以使用括号来捕获前六个数字,忽略后面的非数字:
/([0-9]{3} ?[0-9]{3})[^0-9]/
这匹配 123456 和 123 456 但不匹配 1234567。