如何使用正则表达式从文本字符串中拆分姓名与电话号码
正则表达式拆分姓名与电话号码解决方案
原代码问题分析
你原代码里的正则(?<=[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
相关产品推荐
相关产品推荐

