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

修复find_all_phones函数正则表达式以匹配乌克兰国际格式手机号

修复乌克兰国际格式电话号码的正则表达式问题

原函数的正则表达式仅匹配了号码的前半段,导致结果截断,无法完整捕获符合要求的17位乌克兰国际格式电话号码。

问题分析

给定的乌克兰电话号码规则:

  • 必须以+开头,格式为+380(XX)XXX-X-XXX或+380(XX)XXX-XX-XX
  • 总长度固定为17字符
  • 仅包含数字、+、(、)、-符号

原正则r"(\+380\(\d{2}\)\d{3}-\d{1,2})"只匹配到+380(XX)XXX-X或+380(XX)XXX-XX部分,遗漏了后续的-XXX或-XX段,因此无法完整捕获目标号码。

修正后的代码

import re

def find_all_phones(text):
    # 匹配两种合法格式:+380(XX)XXX-X-XXX 或 +380(XX)XXX-XX-XX,确保总长度17字符
    result = re.findall(r"\+380\(\d{2}\)\d{3}-(?:\d{1}-\d{3}|\d{2}-\d{2})", text)
    return result

正则解释

  • \+380:匹配号码开头的国际区号前缀
  • \(\d{2}\):匹配两位数字的区号,用英文括号包裹
  • \d{3}:匹配区号后的三位数字
  • -:匹配第一个分隔横杠
  • (?:\d{1}-\d{3}|\d{2}-\d{2}):非捕获组,同时匹配两种合法的后缀格式:
    • \d{1}-\d{3}:1位数字+横杠+3位数字
    • \d{2}-\d{2}:2位数字+横杠+2位数字
      这两种组合刚好让整个号码长度达到17字符,符合规则要求。

测试验证

传入示例文本:

Irma +380(67)777-7-771 second +380(67)777-77-77 aloha a@test.com abc111@test.com.net +380(67)111 -777-777+380(67)777-77-787

修正后的函数返回:

['+380(67)777-7-771', '+380(67)777-77-77', '+380(67)777-77-78']

与预期结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:35:18