可能重复:
A comprehensive regex for phone number validation
grep with regex for phone number
大家好,
我是Stackoverflow的新手,我有一个简单的问题。让我们假设我们获得了大量的HTML文件(理论上无限大)。如何使用正则表达式从所有这些文件中提取电话号码列表?
解释/表达将非常感激。电话号码可以是以下任何格式:
非常感谢您的帮助并拥有一个好的帮助!
答案 0 :(得分:6)
/^[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{4})$/
应该完成你想要做的事。
第一部分^
表示“行的开头”,它将强制它考虑整个字符串。
我所拥有的[\.-)( ]*
表示“任何句号,连字符,括号或空格出现0次或更多次”。
([0-9]{3})
群集匹配一组3个数字(最后一个设置为匹配4)
希望有所帮助!
答案 1 :(得分:4)
在不知道您使用的语言的情况下,我不确定语法是否正确。
这应该与您的所有群体匹配,误报率极低:
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
匹配后您将感兴趣的群组是群组1,3和4.群组2仅用于确保第一个和第二个分隔符,
.
或{{ 1}}是一样的。
例如,用于剥离字符并在表格中留下电话号码的sed命令123456789:
-
以下是我表达的误报:
将表达式分为两部分,一部分与括号匹配,另一部分则不会消除所有这些误报,除了第一部分:
sed "s/(\{0,1\}\([0-9]\{3\}\))\{0,1\}\([ .-]\{0,1\}\)\([0-9]\{3\}\)\2\([0-9]\{4\}\)/\1\3\4/"
在这种情况下,第1,3和4组或第5,7和8组都很重要。
答案 2 :(得分:1)
这将帮助您捕捉括号中区号的
([0-9]\{3\})[ .-][0-9]\{3\}[ .-][0-9]\{4\}
其他人是:
[0-9]\{3\}[ -][0-9]\{3\}[ -][0-9]\{4\}
[0-9]\{10\}
我将第一个和第二个分开,因为将它们放在一起而不回溯可能会让您接受(123 456 7890
或123) 456 7890
另请注意,在我使用grep
的终端上,我不得不逃离{ }
重复。您可能没有,或者您可能必须逃避其他角色,具体取决于您打算使用它的位置。
答案 3 :(得分:1)
^(\(?\d{3}\)?)([ .-])(\d{3})([ .-])(\d{4})$
这应该匹配除最后一个模式之外的所有模式。
对于最后一个,您可以使用分隔模式^\d{10}$
如果有错误,则会匹配(123 456 7899
^(\(?\d{3}\)?)
,如果我们破解此代码,则第一个字符(^
)与文本的开头匹配。 \(?
和\)?
会接受或不接受此字符,有问题需要检查是否有开口字符,如果有第二个必须匹配,我不知道如果可以只使用正则表达式。 \d{3}
将匹配三个数字
([ .-])
将匹配其中任何一个,但只有一个且仅一次。
(\d{3})
将匹配三个数字
与2
(\d{4})$
四个数字后跟文字末尾($
)
由于您要从HTML网页中提取,因此您必须忽略^
和$
以匹配文本的任何部分,并在javascript / exp /中设置标记global
g