我正在编写一个匹配美国电话号码格式的代码
所以它应该匹配:
123-333-1111
(123)111-2222
123-2221111
但不应匹配 1232221111
matchThreeDigits = r"(?:\s*\(?[\d]{3}\)?\s*)"
matchFourDigits = r"(?:\s*[\d]{4}\s*)"
phoneRegex = '('+ '('+ matchThreeDigits + ')' + '-?' + '('+ matchThreeDigits + ')' + '-?' + '(' + matchFourDigits + ')' +')';
matches = re.findall(re.compile(phoneRegex),line)
问题是我需要确保模式中至少存在 () 或 '-' 之一(否则它可以是九位数字而不是电话号码)。出于效率原因,我不想再做一次模式搜索。有没有办法在正则表达式模式本身中容纳这些信息。