我实现的当前正则表达式只能提取给定字符串的前两个大写单词 . 如果第二个单词没有大写,我希望能够只提取字符串中的第一个单词 .
这里有些例子:
s = 'Smith John went to ss for Jones.'
s = 'Jones, Greg went to 2b for Smith.'
s = 'Doe went to ss for Jones.'
基本上,我只想要正则表达式输出以下内容:
'Smith John'
'Jones, Greg'
'Doe'
我现有的正则表达式如下,除了它不会捕获Doe示例:
new = re.findall(r'([A-Z][\w-]*(?:\s+[A-Z][\w-]*)+)', s)
2 回答
正则表达式是矫枉过正 .
str.isupper()
效果很好:这给出了:
添加几个检查,以便当您的字符串只有一个单词时它不会出错,并且您很高兴 .
如果你一直在使用正则表达式,你可以使用这样的模式:
r'([A-Z].*? ){1,2}'
将匹配第一个,可选第二个,如果它们是大写的 .