如何为此构建正则表达式?

时间:2015-10-24 17:44:19

标签: regex

数据:

(650 ) 724-6354
(650)  724-6354
(650)724-6354
650 724-6354
650 724 6354
650   724   6354

有人可以为上述建议一个正则表达式吗? 我需要检测10位数,并将其表示为650-724-6354

4 个答案:

答案 0 :(得分:2)

这应该为您提供3个正则表达式捕获中的数字:

/(\d{3})[ \)]+(\d{3})[ \-]+(\d{4})/

答案 1 :(得分:0)

很简单:

 Search: .*(\d{3}).*(\d{3}).*(\d{4})
Replace: \1-\2-\3

Regex101

答案 2 :(得分:0)

在PCRE语法中

可能的解决方案是:

/\(?\s*(\d{3})\s*\)?(\s*|-)(\d{3})(\s*|-)(\d{4})/

然后,1美元,3美元,5美元将包含您正在寻找的总共10位数字。

答案 3 :(得分:0)

这里是一个更完整的建议,减少了更复杂的字符序列的缺陷。

使用python编写的一个简单片段,考虑组之间的任何类型的字符,返回每个数字序列的组件。

import re


def get_components(phone_str):
    rex = re.compile(r"[^\d]*(\d{3})[^\d]*(\d{3})[^\d]*(\d{4})[^\d]*")
    return rex.findall(phone_str)[0]

以下是使用示例字符串的测试代码:

test_strs = [
    "650   724   6354",
    "(650 ) 724-6354",
     "(650)  724-6354",
     "(650)724-6354",
     "650 724-6354",
     "650 724 6354",
     "650   724   6354",
]
print(["%s-%s-%s"%get_components(p) for p in test_strs])