我想在Python中使用正则表达式,它提取一个或多个以大写字母开头的单词,除非单词出现在第一个单词中。我知道这不是一个强大而一致的方法,但它会解决我的问题,因为我不想使用任何统计方法(例如在NLTK或StanfordNER中)。
示例:
extract('His name is John Wayne.')
应该返回['John Wayne']。
extract('He is The President of Neverland.')
应该返回['The President','Neverland'],因为它们是大写单词而且不会出现在句子的开头。
另一个例子:
extract('He came home. Although late, it was nice to have Patrick there.')
应该返回['Patrick']因为'他'和'虽然'出现在一个句子的开头。
此外,它可能会删除标点符号,例如'他是约翰,来了'应该返回'约翰'而不是'约翰'。
答案 0 :(得分:3)
您可以将此表达式用于此任务:
(?<!\.\s)(?!^)\b([A-Z]\w*(?:\s+[A-Z]\w*)*)
RegEx分手:
(?<!\.\s)
- 断言我要断言我们之前没有DOT和空格(?!^)
- 断言我们尚未开始的否定前瞻\b
- 字边界(
- 开始捕获群组
[A-Z]\w*
- 匹配以大写字母开头的单词(?:
- 启动非捕获组
\s+
- 匹配1个或更多空格[A-Z]\w*
- 匹配大写字母)*
结束非捕获组。匹配0或更多这些)
- 结束捕获组