在不知道您使用什么语言的情况下,我不确定语法是否正确。
这应该与您的所有组匹配,并且误报很少:
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
比赛后您将感兴趣的组是第 1、3 和 4 组。第 2 组的存在只是为了确保第一个和第二个分隔符
、.
或-
相同。
例如,一个 sed 命令去除字符并以 123456789 的形式留下电话号码:
sed "s/(\{0,1\}\([0-9]\{3\}\))\{0,1\}\([ .-]\{0,1\}\)\([0-9]\{3\}\)\2\([0-9]\{4\}\)/\1\3\4/"
以下是我表达的误报:
- (123)456789
- (123456789
- (123 456 789
- (123.456.789
- (123-456-789
- 123)456789
- 123) 456 789
- 123).456.789
- 123)-456-789
将表达式分成两部分,一部分与括号匹配,另一部分不匹配,将消除除第一个之外的所有这些误报:
/\(([0-9]{3})\)([ .-]?)([0-9]{3})\2([0-9]{4})|([0-9]{3})([ .-]?)([0-9]{3})\5([0-9]{4})/
在这种情况下,第 1、3 和 4 组或 5、7 和 8 组很重要。