匹配n个数字的子字符串,但如果之后有任何数字则不匹配

时间:2018-02-23 14:02:53

标签: regex

基本上我正在寻找一个匹配一些简单电话号码的正则表达式。

我希望匹配较长的文本字符串中的数字,例如123 4567891-011121314151,这些内容(希望)由(\d{3,4}[- ]\d{3,4}|\d{4,8})标识,但是我如果它们属于3919503570275等更长的数字,则不想匹配它们。

如果我要求下一个字符是非数字或行的结尾,那么下一个字符也会包含在匹配中,这是我不想要的。

2 个答案:

答案 0 :(得分:3)

用前瞻和后视来围绕你的正则表达式以拒绝双方\d

(?<!\d)(\d{3,4}[- ]\d{3,4}|\d{4,8})(?!\d)

Demo.

请注意,这会接受一个字符串,该字符串看起来像是前面或后跟字母的电话号码。

答案 1 :(得分:0)

根据您使用的编程语言,我建议使用否定预测或使用组来提取数字。

有关环视模式的信息,请参阅https://www.regular-expressions.info/lookaround.html