python - python 正则表达式分组的最佳实践

标签 python regex

我有一个包含 python 中的任意电话号码的字符串列表。 扩展是可选部分。

st = ['(800) 555-1212',
'1-800-555-1212',
'800-555-1212x1234',
'800-555-1212 ext. 1234',
'work 1-(800) 555.1212 #1234']

我的目标是隔离电话号码,以便我可以隔离每个单独的组。 “800”、“555”、“1212”和可选的“1234”。

我已经尝试了以下代码。

p1 = re.compile(r'(\d{3}).*(\d{3}).*(\d{4}).*(\d{4})?')
step1 = [re.sub(r'\D','',p1.search(t).group()) for t in st]
p2 = re.compile(r'(\d{3})(\d{3})(\d{4})(\d{4})?')
step2 = [p2.search(t).groups() for t in step1]

p1 和 p2 是获取所需输出的两种模式。

for i in range(len(step2)):
print step2[i]

输出是:

('800', '555', '1212', None)
('800', '555', '1212', None)
('800', '555', '1212', '1234')
('800', '555', '1212', '1234')
('800', '555', '1212', '1234')

由于我是一个新手,如果有更好的方法来解决此类问题或Python社区遵循的一些最佳实践,我希望得到建议。提前致谢。

最佳答案

我认为re.findall并且组的相似性使您可以采用更简单的方法:

>>> import re
>>> from pprint import pprint
>>> res = [re.findall(r'\d{3,4}', s) for s in st]
>>> pprint res
[['800', '555', '1212'],
 ['800', '555', '1212'],
 ['800', '555', '1212', '1234'],
 ['800', '555', '1212', '1234'],
 ['800', '555', '1212', '1234']]

关于python - python 正则表达式分组的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41793349/

相关文章:

python - 在 Selenium Grid 上运行 Firefox 测试时在 xvfb 显示屏幕之间切换

python - Pytube 库 - 尝试访问视频数据时收到 "pytube.exceptions.RegexMatchError: regex pattern"错误

python - 进行条件 django 查询的更好方法

java获取正则表达式重叠匹配

javascript - PHP - file_get_contents 使用正则表达式获取 JSON,但无法解码 JSON(获取 JSON_ERROR_SYNTAX)

javascript - 为什么我的 javascript 匹配返回 null?

python - 请求 Python : Passing payload POST request

python - 无法在 Postgresql plpython 函数中导入自己的 python 模块

javascript - 在大循环 : . indexOf(str) 或 .match(regex) 中使用什么具有更高的性能?

ruby - 正则表达式语法