可能重复:电话号码验证的全面正则表达式grep与电话号码的正则表达式
大家好,
我是Stackoverflow的新手,我有一个简单的问题 . 让我们假设我们获得了大量的HTML文件(理论上无限大) . 如何使用正则表达式从所有这些文件中提取电话号码列表?
解释/表达将非常感激 . 电话号码可以是以下任何格式:
-
(123)456 7899
-
(123).456.7899
-
(123)-456-7899
-
123-456-7899
-
123 456 7899
-
1234567899
非常感谢您的帮助并拥有一个好的帮助!
4 回答
/^[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{4})$/
应该完成你想要做的事情 .
第一部分
^
表示"start of the line",它将强制它考虑整个字符串 .我在那里的
[\.-)( ]*
意思是"any period, hyphen, parenthesis, or space appearing 0 or more times" .([0-9]{3})
群集匹配一组3个数字(最后一个设置为匹配4)希望有所帮助!
在不知道您正在使用什么语言的情况下,我不确定语法是否正确 .
这应该与您的所有组匹配,误报率很低:
匹配后您将感兴趣的组是组1,3和4.组2仅用于确保第一个和第二个分隔符 `` ,
.
或-
相同 .例如,用于剥离字符并在123456789中保留电话号码的sed命令:
以下是我表达的误报:
(123)456789
(123456789
(123 456 789
(123.456.789
(123-456-789
123)456789
123)456 789
123).456.789
123)-456-789
将表达式分为两部分,一部分与括号匹配,另一部分不匹配将消除所有这些误报,除了第一部分:
在这种情况下,第1,3和4组或第5,7和8组都很重要 .
这将帮助您捕获括号中区号的那些
其他人是:
我将第一个和第二个分开,因为将它们放在一起而不回溯可能会让你接受
(123 456 7890
或123) 456 7890
另请注意,在我的终端上使用
grep
,我不得不逃避{ }
重复 . 您可能没有,或者您可能必须逃避其他角色,具体取决于您打算使用它的位置 .^(\(?\d{3}\)?)([ .-])(\d{3})([ .-])(\d{4})$
除最后一个模式外,这应匹配所有模式 . 对于最后一个,您可以使用分离的模式
^\d{10}$
并且有一个错误,它会匹配
(123 456 7899
^(\(?\d{3}\)?)
,如果我们破坏此代码,则第一个字符(^
)与文本的开头匹配 .\(?
和\)?
将接受或不接受此字符,有问题要做,你必须检查是否有开放字符,如果有第二个必须匹配,我不知道是否有可能只使用正则表达式 . 并且\d{3}
将匹配三个数字([ .-])
将匹配其中任何一个,但只有一个且仅一次 .(\d{3})
将匹配三个数字与2相同
(\d{4})$
四个数字后跟文本末尾($
)由于您要从HTML页面中提取,您必须忽略
^
和$
以匹配文本的任何部分并在javascript / exp /g
中设置标志global
你可以test Regex here