我正在写一个代码来匹配美国电话号码格式
所以它应该匹配:
123-333-1111
(123)111-2222
123-2221111
但不应该匹配 12322111号
matchThreeDigits = r"(?:\s*\(?[\d]{3}\)?\s*)"
matchFourDigits = r"(?:\s*[\d]{4}\s*)"
phoneRegex = '('+ '('+ matchThreeDigits + ')' + '-?' + '('+ matchThreeDigits + ')' + '-?' + '(' + matchFourDigits + ')' +')';
matches = re.findall(re.compile(phoneRegex),line)
问题是我需要确保模式中至少存在()或“-”中的一个(或者它可以是9位数字而不是电话号码)。出于效率考虑,我不想再做一次模式搜索。有没有办法在regex模式本身中容纳这些信息。你知道吗
输出
您可以在这里看到对这个正则表达式的解释:http://regex101.com/r/bA4fH8
可以使用以下正则表达式:
假设
(123)1112222
是可以接受的。你知道吗|
分别充当or,和\(
和\)
逃逸(
和)
。你知道吗像这样的?你知道吗
使用它:
注意:
您要求解释:
(?P<A>-)
和(?(A)-?|-)
(?P<A>-)
:是一个名为A
,(?P<NAME> ... )
的命名捕获组(?(A)-?|-)
:检查命名组A
是否捕获了某些内容的组,如果捕获了,则执行YES,否则执行NO捕获。(?(NAME)YES|NO)
如果您在Python解释器中执行一个简单的
help(re)
,或者在Google中搜索Python正则表达式,那么所有这些都很容易学会。。。。你知道吗相关问题 更多 >
编程相关推荐