You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 3:如何借助字典将电话号码转换为国际格式?

嘿,这个电话号码格式转换的需求其实两种思路都能搞定——不管是用正则配合字典映射(你提到的lambda方案),还是纯正则表达式实现,都能完美达成目标。我来给你详细拆解一下:

方法一:正则 + 字典映射(易维护,推荐)

这种方式把替换规则存在字典里,逻辑清晰,后续如果要加新的前缀规则,直接修改字典就行,可读性和扩展性都很强。结合re.sub和lambda表达式就能轻松实现:

import re

# 测试用的电话号码列表
phone_numbers = ["0707262078", "065017063", "0046733165812"]

# 定义前缀替换规则字典
replace_rules = {
    "07": "+467",
    "06": "+466",
    "00": "+"
}

# 正则匹配开头的目标前缀:07/06/00
pattern = r'^(07|06|00)'

# 批量转换号码
converted_numbers = [
    re.sub(pattern, lambda match: replace_rules[match.group()], num)
    for num in phone_numbers
]

print(converted_numbers)
# 输出: ['+46707262078', '+4665017063', '+46733165812']

这里的lambda表达式会捕获正则匹配到的前缀,然后去字典里找对应的国际格式前缀完成替换,非常直观。

方法二:纯正则表达式实现

如果不想用字典,仅靠正则和简单的替换逻辑也能实现。这里有两种写法:

写法1:分步正则替换

把不同的前缀规则拆成两次正则替换,逻辑简单直接:

import re

phone_numbers = ["0707262078", "065017063", "0046733165812"]
converted_numbers = []

for num in phone_numbers:
    # 先处理07/06开头的号码
    num = re.sub(r'^0(7|6)', r'+46\1', num)
    # 再处理00开头的号码
    num = re.sub(r'^00', r'+', num)
    converted_numbers.append(num)

print(converted_numbers)
# 输出和上面一致

写法2:单正则分支匹配 + 简单lambda

用正则的分支匹配捕获不同前缀,再通过lambda做简单判断替换,不用额外字典:

import re

phone_numbers = ["0707262078", "065017063", "0046733165812"]

# 正则匹配07/06(捕获后面的数字)或00
pattern = r'^0(7|6)|^00'

converted_numbers = [
    re.sub(pattern, lambda m: f'+46{m.group(1)}' if m.group(1) else '+', num)
    for num in phone_numbers
]

print(converted_numbers)

这里的lambda会判断是否捕获到了7/6(也就是匹配到了07/06前缀),如果有就拼接+46和捕获的数字,否则就是匹配到了00前缀,直接替换成+。

总结

两种方案都能满足你的需求:

  • 如果以后可能需要扩展更多前缀规则,正则+字典的方式更易维护;
  • 如果规则固定不变,纯正则替换的写法更简洁直接。

内容的提问来源于stack exchange,提问作者Kristian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:15:18