如何用Python正则表达式匹配“Firstname Lastname”格式的全名
匹配「Firstname Lastname」格式姓名的实现方法
正则规则说明
你需要匹配的格式核心要求为:仅包含两部分英文字母,中间仅存在一个空格,无多余空格或其他字符,对应正则表达式为:^[a-zA-Z]+\s[a-zA-Z]+$
规则拆解:
^标记字符串的起始位置,避免姓名前出现多余字符[a-zA-Z]+匹配至少1个大小写英文字母,对应名字部分\s匹配名字和姓氏中间的1个空格[a-zA-Z]+匹配至少1个大小写英文字母,对应姓氏部分$标记字符串的结束位置,避免姓名后出现多余字符
你之前写的正则存在两个核心问题:
- 没有添加量词
+,默认仅能匹配单个字符,无法匹配长度超过1的姓名 - 将空格写入了字符集
[a-zA-Z a-zA-Z]中,等价于允许任意位置出现任意数量的空格,无法保证仅中间有一个空格
修正后完整代码
# 首先导入正则模块,你之前的代码漏了这步会运行报错 import re user_input = input("请输入你的全名: ") def valid_name(): name_regex = re.compile(r'^[a-zA-Z]+\s[a-zA-Z]+$') # 使用fullmatch可以直接校验整个字符串是否完全匹配规则,和加^$效果一致 name_match = re.fullmatch(name_regex, user_input) if name_match: print(user_input) else: print('请按照「名 姓」的格式输入姓名,例如 John Doe') valid_name()
可选扩展
如果需要支持带撇号、连字符的常见英文姓名(例如 O'Neil、Anne-Marie),可以把正则修改为:^[a-zA-Z'-]+\s[a-zA-Z'-]+$
内容的提问来源于stack exchange,提问作者Kennerdol
相关产品推荐
相关产品推荐

