正则表达式为两个专有名词

时间:2016-03-15 08:18:39

标签: regex nlp

我正在尝试构建一个脚本,该脚本应该为您提供文本的正确名称列表。我想构建一个正则表达式,该表达式匹配以大写字母开头并且不会开始恍惚的每个单词。文本中的一个例子:

  

“但是当他想到这些事时,看哪,是主的使者   在梦中向他显现,说:大卫的儿子约瑟夫不会   害怕把你的妻子玛丽带给你,因为那是怀孕的   她是圣灵。她准备生一个儿子。你必须给他起名叫耶稣。那是因为他会将他的人民从他们的罪中拯救出来。

我希望正则表达式匹配:“主”,“约瑟夫”,“大卫”,“玛丽”,“神圣”和“精神”。它不应该匹配“但是”,“她”,“你”或“那个”。所以我这样做了:

[a-z,;:] +([A-Z][a-z]+)[\W]

这匹配主,约瑟夫,大卫,玛利亚和圣洁,但不是精神。这就是我的问题:在找到“神圣”之后,正则表达式继续在文本中搜索模式;为了找到“精神”,正则表达式应该考虑第一个方括号,取“神圣”的“y”。因此,在发现“神圣”之后应该重新启动而不是“神圣”之后。我也尝试过非匹配组,例如:

(?:[a-z,;:]) +([A-Z][a-z]+)[\W]

但这也不是答案。如果有人愿意,我会非常感激。 此致!

2 个答案:

答案 0 :(得分:2)

正则表达式

(?<=[a-z,;:] )([A-Z][a-z]+)

Demo

输出:

MATCH 1
1.  [65-69] `Lord`
MATCH 2
1.  [106-112]   `Joseph`
MATCH 3
1.  [121-126]   `David`
MATCH 4
1.  [160-164]   `Mary`
MATCH 5
1.  [221-225]   `Holy`
MATCH 6
1.  [226-232]   `Spirit`

答案 1 :(得分:1)

你可以尝试

(?<![.!?;]) ([A-Z]\w+)

demo