【发布时间】:2018-02-10 17:54:47
【问题描述】:
我正在尝试解析可以通过不同方式获得的电话号码。例如:
(321) 123-4567
(321) 1234567
321-123-4567
321123-4567
然后我想分别绘制这三个部分中的每一个。我的想法是使用命名组和一些和或这样的情况:
(^\s*(?P<area>[0-9]{3})\-?(?P<fst>[0-9]{3})\-(?P<lst>[0-9]{4}))|(^\s*\(\area\)\s*(\fst)\-?(\lst))
我认为,问题在于我没有正确调用命名组。我正在尝试使用https://regex101.com/ 来提供帮助,但仍然卡住了。因为区号周围的括号应该都在那里,或者都不应该在那里,所以我不想使用“?”像这样的字符:
\(?(?P<area>[0-9]{3})\)?
谁能帮我解决这个问题?非常感谢。
我正在使用 python 3.6 和 re 包。
【问题讨论】:
-
正则表达式在您描述的情况下具有某些限制,即具有一对平衡的括号。在您的情况下,您可以使用替代方法:
(?:\(...\)|...).
标签: python regex python-3.x parsing regex-group