gpt4 book ai didi

regex - Python 3 用字典中的数据替换部分字符串

转载 作者:行者123 更新时间:2023-12-01 11:17:27 25 4
gpt4 key购买 nike

我需要将电话号码转换为国际格式。我有一个电话号码示例列表

rows = [
(datetime.time(20, 35, 30), '0707262078',),
(datetime.time(20, 38, 18), '+46706332602',),
(datetime.time(20, 56, 35), '065017063'),
(datetime.time(21, 45, 1), '+46730522807',),
(datetime.time(22, 13, 47), '0046733165812')
]

我需要将所有以 ex 07 开头的数字替换为 +467,将所有 06 替换为 +466,将 00 替换为 +。对于上面的例子,我需要数字变成 0707262078 到 +46707262078,065017063 到 +4665017063 和 0046733165812 到 +46733165812。
不知道是否可以仅在正则表达式中执行此操作,或者我是否需要使用其他代码执行此操作。

一直在尝试将 re.sub 与 lamda 结合使用,我的想法是制作一个包含匹配替换的字典,如下所示:

repl_dict = {
'01': '+461',
'02': '+462',
'03': '+463',
'04': '+464',
'05': '+465',
'06': '+466',
'07': '+467',
'08': '+468',
'09': '+469',
'00': '+'
}

到目前为止我的尝试:

import re
rows = [
(datetime.time(20, 35, 30), '0707262078',),
(datetime.time(20, 38, 18), '+46706332602Ring via Mitel ',),
(datetime.time(20, 56, 35), '065017063'),
(datetime.time(21, 45, 1), '+46730522807Ring via Mitel ',),
(datetime.time(22, 13, 47), '0046733165812')
]

repl_dict = {
'01': '+461',
'02': '+462',
'03': '+463',
'04': '+464',
'05': '+465',
'06': '+466',
'07': '+467',
'08': '+468',
'09': '+469',
'00': '+'
}

for row in rows:
regex = re.compile(r'^\d{1}[0-9](\d*)'), re.S
DialedNumber = regex.sub(lambda match: repl_dict.get(match.group(0), row[1]), row[1], row[1])

最佳答案

您的正则表达式以 \d* 结尾,将匹配整个数字,因此在字典中找不到任何条目。此外,在对 sub 的调用中似乎有一个不匹配的括号和一个太多的 row[1]

您可以将您的正则表达式简化为 ^00? 并将您的替换字典简化为 {'00': '+', '0': '+46'}。这将检查数字是否以一个或两个 0 开头,从而使替换 dict 更简单且重复更少。

rows = [(datetime.time(20, 35, 30), '0707262078',), (datetime.time(20, 38, 18), '+46706332602Ring via Mitel ',), (datetime.time(20, 56, 35), '065017063'), (datetime.time(21, 45, 1), '+46730522807Ring via Mitel ',), (datetime.time(22, 13, 47), '0046733165812')]
repl_dict = {'00': '+', '0': '+46'}
regex = re.compile(r'^00?')
for date, number in rows:
print(regex.sub(lambda match: repl_dict.get(match.group(0)), number))

输出:

+46707262078
+46706332602Ring via Mitel
+4665017063
+46730522807Ring via Mitel
+46733165812

如果您只需要数字部分,您可以使用第二个正则表达式对数字进行预处理或后处理,例如 [0-9+]*

关于regex - Python 3 用字典中的数据替换部分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48769808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com