如何使用Python定义匹配括号中的括号或不使用括号而不是单个括号的重新模式?

时间:2017-09-21 15:02:08

标签: python regex

我想定义一个匹配电话号码的重新模式,如

 (514) 123-4567
 514-123-4567

但它不应该接受像

那样的单括号
(514 123-4567
514) 123-4567

我知道我可以使用堆栈修复它,但是如何以纯正则表达式方式解决它?非常感谢。

4 个答案:

答案 0 :(得分:1)

我应该这样做:(?:(?:\([0-9]*?\))|(?:[0-9]*))*

答案 1 :(得分:0)

使用以下正则表达式模式:

^((?=.*\().*(?=.*\)).*|[^()]+)$

https://regex101.com/r/E1yHVY/3

答案 2 :(得分:0)

^(.*(?<=\().*\).*)$|^[^\(\)]+$

这个没有具体检查电话号码,但是将括号规则应用于任何字符串。

https://regex101.com/r/7RhcTq/1

答案 3 :(得分:0)

你可以试试这个:

import re
s1 = "(514) 123-4567"
s2 = "514-123-4567"
a = [s1, s2]
numbers = [re.findall("(\(\d{3}\)\s\d{3}-\d{4})|(\d{3}-\d{3}-\d{4})", i) for i in a]
final_numbers = [[b for b in i if b][0][0] for i in numbers if i]