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

如何使用正则表达式从文本字符串中拆分姓名与电话号码

正则表达式拆分姓名与电话号码解决方案

原代码问题分析

你原代码里的正则(?<=[a-zA-Z])(?=\d)试图匹配字母紧跟数字的位置,但目标字符串中姓名和电话之间有空格,且电话开头是括号(而非数字,导致这个断言无法匹配到有效位置,返回None自然得不到预期结果。

解决方案

我们可以通过正则分组来分别匹配姓名和电话号码,利用电话号码的特征(包含数字、+、()、空格、-)来区分两者:

正则模式说明

使用模式 ^(.*?)\s+([+\(\)\d\s-]+)$,各部分含义:

  • ^:匹配字符串起始位置
  • (.*?):非贪婪匹配姓名部分(支持全名或单名),直到遇到分隔的空格
  • \s+:匹配姓名与电话之间的一个或多个空格分隔符
  • ([+\(\)\d\s-]+):匹配电话号码部分,涵盖常见的电话格式符号
  • $:匹配字符串结束位置

完整Python代码

import re

# 测试多种场景的输入
tenant_details_list = [
    "Tasha Robinson (123) 4178-6875",
    "John +1 854 545454",
    "Alice 0123-4567890",
    "Bob Wilson (987)654-3210"
]

# 定义正则模式
phone_split_pattern = r"^(.*?)\s+([+\(\)\d\s-]+)$"

for details in tenant_details_list:
    match_result = re.match(phone_split_pattern, details)
    if match_result:
        # 提取并清理分组内容(去除可能的首尾空格)
        full_name = match_result.group(1).strip()
        phone_number = match_result.group(2).strip()
        print(f"Name: {full_name}")
        print(f"Phone No: {phone_number}\n")
    else:
        print(f"无法解析该内容: {details}\n")

输出示例

Name: Tasha Robinson
Phone No: (123) 4178-6875

Name: John
Phone No: +1 854 545454

Name: Alice
Phone No: 0123-4567890

Name: Bob Wilson
Phone No: (987)654-3210

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 23:10:08