我正在尝试编写一个区分名字,姓氏和中间名的Python程序。我正在使用正则表达式来执行此操作,有问题的代码如下。
问题是姓氏是中间名,我认为在末尾使用大写字母S可以使它姓,所以它只选择在单词前加空格但不在其后的单词来查找姓,但lastNameRegex
只是在取中间名。
此外,该代码还应采用“约翰·约瑟夫·史密斯”之类的名称并将每个名称分开,因此,“ \ w +”代表姓氏,“ \ s \ w * \ s”代表姓氏。
感谢所有帮助,我对所有这些东西都很陌生,因此欢迎所有建设性的批评。谢谢! :)
firstNameRegex = re.compile(r'\w+')
middleNameRegex = re.compile(r'\s\w*\s')
lastNameRegex = re.compile(r'\s\w+\S')
答案 0 :(得分:1)
如果只希望正则表达式仅在字符串中的特定位置匹配,则应锚定正则表达式。 ^
匹配字符串的开头,$
匹配字符串的结尾。
firstNameRegex = re.compile(r'^\w+')
middleNameRegex = re.compile(r'(?<=\s)\w*(?=\s)')
lastNameRegex = re.compile(r'\w+$')
我还在middleNameRegex
中使用了lookbehind and lookahead,以便结果名称中不包括空格。