正则表达式用于查找电话号码

Roc*_*cky 8 regex phone-number

可能重复:
电话号码验证的全面正则表达式
grep与电话号码的正则表达式

大家好,

我是Stackoverflow的新手,我有一个简单的问题.让我们假设我们获得了大量的HTML文件(理论上无限大).如何使用正则表达式从所有这些文件中提取电话号码列表?

解释/表达将非常感激.电话号码可以是以下任何格式:

  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899

非常感谢您的帮助并拥有一个好的帮助!

Mit*_*sey 7

/^[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{3})[\.-)( ]*([0-9]{4})$/

应该完成你想要做的事情.

第一部分^意味着"行的开始",这将迫使它考虑整个字符串.

[\.-)( ]*,我在那里的意思是"任何时期,连字符,括号,或者出现0次或更多次的空间".

([0-9]{3})集群相匹配的一组3个数字(最后一个被设置为匹配4)的

希望有所帮助!


Tre*_*ner 5

在不知道您使用什么语言的情况下,我不确定语法是否正确。

这应该与您的所有组相匹配,并且误报很少:

/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/
Run Code Online (Sandbox Code Playgroud)

比赛后您感兴趣的组是组 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/"
Run Code Online (Sandbox Code Playgroud)

以下是我的表达的误报:

  • (123)456789
  • (123456789
  • (123 456 789
  • (123.456.789
  • (123-456-789
  • 123)456789
  • 123)456789
  • 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})/
Run Code Online (Sandbox Code Playgroud)

在这种情况下,组 1、3 和 4 或 5、7 和 8 很重要。