为什么此正则表达式不能在我的Python中运行?

时间:2019-02-01 01:26:15

标签: python regex

我正在尝试编写一个区分名字,姓氏和中间名的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')

1 个答案:

答案 0 :(得分:1)

如果只希望正则表达式仅在字符串中的特定位置匹配,则应锚定正则表达式。 ^匹配字符串的开头,$匹配字符串的结尾。

firstNameRegex = re.compile(r'^\w+')
middleNameRegex = re.compile(r'(?<=\s)\w*(?=\s)')
lastNameRegex = re.compile(r'\w+$')

我还在middleNameRegex中使用了lookbehind and lookahead,以便结果名称中不包括空格。