正则表达式仅基于大写

时间:2017-05-15 06:30:25

标签: python regex regex-lookarounds

我想在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']因为'他'和'虽然'出现在一个句子的开头。

此外,它可能会删除标点符号,例如'他是约翰,来了'应该返回'约翰'而不是'约翰'。

1 个答案:

答案 0 :(得分:3)

您可以将此表达式用于此任务:

(?<!\.\s)(?!^)\b([A-Z]\w*(?:\s+[A-Z]\w*)*)

RegEx Demo

RegEx分手:

  • (?<!\.\s) - 断言我要断言我们之前没有DOT和空格
  • (?!^) - 断言我们尚未开始的否定前瞻
  • \b - 字边界
  • ( - 开始捕获群组
    • [A-Z]\w* - 匹配以大写字母开头的单词
    • (?: - 启动非捕获组
      • \s+ - 匹配1个或更多空格
      • [A-Z]\w* - 匹配大写字母
    • )*结束非捕获组。匹配0或更多这些
  • ) - 结束捕获组