[英]Matching phone numbers, regex
我用这种格式的电话号码:
some_text phone_number some_text
some_text (888) 501-7526 some_text
这是搜索电话号码的更加pythonic方式
(\(\d\d\d\) \d\d\d-\d\d\d\d)
(\([0-9]+\) [0-9]+-[0-9]+)
还是有一个更简单的表达来做到这一点?
我想你正在寻找这样的东西:
(\(\d{3}\) \d{3}-\d{4})
从Python文档 :
{M}
指定应匹配前一个RE的m个副本; 较少的匹配导致整个RE不匹配。 例如,{6}将恰好匹配六个'a'字符,但不匹配五个字符。
(\\(\\d\\d\\d\\) \\d\\d\\d-\\d\\d\\d\\d)
也可以使用,但是,正如您在问题中所说,这是相当重复的。 您的其他建议模式(\\([0-9]+\\) [0-9]+-[0-9]+)
会在输入上给出误报,例如(1) 2-3
。
使用(\\(\\d{3}\\)\\s*\\d{3}-\\d{4})
>>> import re
>>> s = "some_text (888) 501-7526 some_text"
>>> pat = re.compile(r'(\(\d{3}\)\s*\d{3}-\d{4})')
>>> pat.search(s).group()
'(888) 501-7526'
说明:
(\\(\\d{3}\\)\\s*\\d{3}-\\d{4})/
(\\(\\d{3}\\)\\s*\\d{3}-\\d{4})
\\(
匹配字符(
字面意思) \\d{3}
匹配一个数字[0-9]
{3}
恰好3次 \\)
)
字面上匹配字符 \\s*
匹配任何空格字符[\\r\\n\\t\\f ]
*
在零和无限次之间,尽可能多次,根据需要回馈[贪心] \\d{3}
匹配数字[0-9]量词: {3}
恰好3次 -
匹配角色 - 字面意思 \\d{4}
匹配数字[0-9]量词: {4}
恰好4次 我认为第二个将是更加pythonic的方式。 上面的那个并不容易阅读,但正则表达式根本就不那么直观。
如果未指定电话号码的长度, (\\([0-9]+\\) [0-9]+-[0-9]+)
将执行此操作。 如果长度始终相同,则可以使用(\\([0-9]{3}\\) [0-9]{3}-[0-9]{4})
或(\\(\\d{3}\\) \\d{3}-\\d{4})
(\\([0-9]{3}\\) [0-9]{3}-[0-9]{4})
(\\(\\d{3}\\) \\d{3}-\\d{4})
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.