0
点赞
收藏
分享

微信扫一扫

python 提高效率篇(三)

@[toc]

1. 写作背景

对一个文档中的电话号码进行提取,如果一个电话字符串满足多种匹配格式,则优先保留字符长度最长的电话。

2. 要进行匹配的文本

ffa770e8eaf505b21963a965aec48f0.png

3. 初始代码

# 正则表达式列表
tel_complile = [
    '\d\.\d{3}\.\d{3}\.\d{4}',
    '\d{3}\.\d{3}\.\d{4}'
    ]

# 正则表达式匹配结果
templist  = []
for i in tel_complie:
    templist.append(re.findall(i, text))
            templist = [ for i in tel_complile]

# 匹配结果的字符串长度
x = []
for index, i in enumerate(templist):
    if len(i) == 0:
        x.append(0)
    else:
        x.append(len(i[0]))

# 得到 tel
tel_li = []
for index, i in enumerate(x):
    if i == max(x):
        tel_li .append(templist[index][0])
tel  = tel_li[0]

4. 修改后的代码

可以看到,上面的代码还是挺多的,是不是有点心烦,下面使用列表推导式和三目运算来改进一下:
输出结果

# 正则表达式列表
tel_complile = [
                '\d\.\d{3}\.\d{3}\.\d{4}',  # 用于匹配 1.111.111.1111格式的 tel
                '\d{3}\.\d{3}\.\d{4}' # 用于匹配 111.111.1111格式的 tel
                ]

# 正则表达式匹配结果
templist = [re.findall(i, text) for i in tel_complile]

# 匹配结果的字符串长度
x = []
for i in templist:
    x.append(0) if len(i) == 0 else x.append(len(i[0]))

# 获取 tel
tel = [templist[index][0] for index, i in enumerate(x) if i == max(x)][0]

5. 输出结果

720dabd0645dafa8cb460cc8bc39b44.png

6. 总结

我个人认为 ==代码在考虑好性能(内存占用)与可读性(注释凝练易懂)后,可以尽情追求精简== 。当然,代码的精简并不是一开始就能做到的,而往往是满足了需求后再回头进行改进的,希望本篇能对大家有所启发~

举报

相关推荐

0 条评论