我试图从字符串中获取所有电话号码。
输入字符串:
Antoine Smith 911 839 7393 9118582588 91145MAURY Bob Smith
我想获得三个电话号码:911 839 7393
9118582588
91145MAURY
我正在使用的正则表达式。
[a-zA-Z]*([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})+
然而,这不起作用。
如果我只是输入短语:" 911 839 7393 9118582588 91145 MAURY Bob Smith"然后正则表达式返回电话号码。
我应该使用什么正则表达式?
答案 0 :(得分:2)
假设区号永远不会是字母和空格是唯一要考虑的标点符号,这将有效\d{3} ?\w{3} ?\w{4}
。
答案 1 :(得分:0)
您可以使用此正则表达式:
(\d{3}\s?\d{3}\s?\d{4})|(\d{5}\w{5})
<强> Working demo 强>
顺便说一下,正则表达式可以缩短一点:
((?:\d{3}\s?){2}\d{4})|(\d{5}\w{5})
答案 2 :(得分:0)
有趣......当人们按姓名考虑电话号码时会变得更具挑战性。考虑到破折号,点和括号作为分隔符,可以进行许多排列。以下是我提出的建议:
((\+\d{1,2}\s)?\(?\d{3}\)?[\s\.\-]?\d{3}[\s\.\-]?\d{4})|(\+?\d{1,2}\s?\(?\-?\d{3}\)?\s?\-?[a-zA-Z0-9]{3,4}[\s\.\-]?[a-zA-Z0-9]{3,5}\b)
好像你的例子和几个流行的国家号码,如1-800-FLOWERS和1 800 BEST-BUY,后者有点棘手,因为模式是4个字母 - 3个字母而不是反向形式
希望有所帮助。
答案 3 :(得分:0)
很棒的答案。
使用:(0-9?)?((?[0-9] {3})?| [0-9] {3})(| - )?([0-9] {3}( | - )[0-9] {4} |?[A-ZA-Z0-9] {7})*