如何在python中同时使用.join()和.format()

2024-06-11 01:58:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在同一个循环中同时使用.join()和.format(),但无法这样做

样本数据:

somelist = [[{'web': 'www.example.com'}], [{'web': 'http://www.example.com/content/vb'}, {'123.123.3968 ': 'tel:123.123.3968'}], [{'web': 'https://example.com/fsdds/'}, {'': 'mailto:abc.xyz@ddaa.com?subject=Inquiry from abc.com%20'}], [{'web': 'https://example.com/svsd'}, {'web': 'http://example.com/vsdv'}, {'098.765.4321 ': 'tel:098.765.4321'}, {'B': 'mailto:xssc.xyz@ddaa.com?subject=Inquiry from xyz.com'}]]

过滤掉电话号码,如下所示:

phn = []
for lst in somelist:
    ph_check = []
    for ph in lst:
        ph_check += [val for val in ph.values() if re.match(r'tel:\(?(\d{3})\)?[^\d]*(\d{3})[^\d]*(\d{4})', val)]
    phn.append(', '.join(ph_check) if ph_check else '')

我想将电话号码的格式设置为以下格式,有人可以建议我如何通过以下格式:

"{} {} {}".format(ph_check.group(1), ph_check.group(2), ph_check.group(3))

获取输出为:tel:123.456.7890

但是我希望输出为:123 456 7890


Tags: incomwebformatforexamplecheck格式
3条回答
phone_nr = "tel:123.456.7890"
phone_nr[4:].replace('.', ' ')

结果:

123 456 7890

这使得:

import re

somelist = [[{'web': 'www.example.com'}], [{'web': 'http://www.example.com/content/vb'}, {'123.123.3968 ': 'tel:123.123.3968'}], [{'web': 'https://example.com/fsdds/'}], [{'web': 'https://example.com/svsd'}, {'web': 'http://example.com/vsdv'}, {'098.765.4321 ': 'tel:098.765.4321'}]]

phn = []
for lst in somelist:
    ph_check = []
    for ph in lst:
        ph_check += [val for val in ph.values() if re.match(r'tel:\(?(\d{3})\)?[^\d]*(\d{3})[^\d]*(\d{4})', val)]
    phn.append(', '.join(ph_check)[4:].replace('.', ' ') if ph_check else '')

如果您想以所需格式提取所有电话号码,我建议:

import itertools as it
rgx = r'tel:\(?(\d{3})\)?[^\d]*(\d{3})[^\d]*(\d{4})'

[" ".join(*x) for x in [re.findall(rgx, x) for x in it.chain(*map(dict.values, it.chain(*somelist)))] if x]

输出:

['123 123 3968', '098 765 4321']

实际上,您并没有从正则表达式返回任何内容,而是使用它来搜索电话号码,如果找到一个电话号码,它将被添加到PHU check中

无论如何,要获得所需的格式,可以删除“tel:”并将“.”替换为“”

    ph_check += [val[4:].replace('.', ' ') for val in ph.values() if re.match(r'tel:\(?(\d{3})\)?[^\d]*(\d{3})[^\d]*(\d{4})', val)]

或者您可以更改正则表达式,使其返回电话号码中的3组数字

相关问题 更多 >