如何在Python 3中编写正则,处理含标点的姓名解析适配URL?
解决正则表达式处理姓名的问题
嘿,我明白你遇到的问题了——原来的正则只能匹配连续的字母,碰到点就卡壳了,所以"J.T.R"只会拿到第一个"J"对吧?咱们来调整一下代码,同时搞定两种情况:
思路拆解
咱们需要覆盖两种核心场景:
- 带后缀的姓名(比如"John, Jr"):提取逗号前面的有效姓名部分
- 带点的缩写(比如"J.T.R"):提取所有字母,去掉中间的分隔点
修改后的代码
import re last_names_parsed = [] for ln in last_names: # 先处理带逗号的后缀场景:匹配逗号前的内容 comma_match = re.match(r'^([^,]+),', ln) if comma_match: # 提取后去除可能的前后空格,兼容不规范输入 parsed_name = comma_match.group(1).strip() else: # 处理带点的缩写场景:提取所有字母并拼接 letters = re.findall(r'[A-Za-z]', ln) parsed_name = ''.join(letters) last_names_parsed.append(parsed_name)
代码细节解释
- 带逗号的场景:用
^([^,]+),匹配字符串开头到第一个逗号的内容,[^,]+表示匹配任意非逗号的字符,捕获组([^,]+)就是我们要的姓名主体,最后用strip()处理可能的前后空格(比如输入是" Mary, Sr "也能正确提取"Mary")。 - 带点的缩写场景:用
re.findall(r'[A-Za-z]', ln)筛选出所有字母字符,再用''.join()把它们拼接成无点的连续字符串,比如"J.T.R"就会转换成"JTR"。
这样两种情况都能完美处理啦,你可以测试不同的输入看看效果~
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

