正则表达式将字符串限制为最短匹配与最长匹配(非贪婪组)?

时间:2015-03-20 00:18:15

标签: regex nlp extraction regex-greedy non-greedy

我在文字的段落中搜索。

我想在那些以特定单词开头的段落中找到字符串,然后抓住紧跟在该匹配单词后面的文本。我想在遇到第一个句号,感叹号,问号或新行时停止...如果在搜索词的100个字符内找不到这些,我想在单词上剪掉字符串最接近100个字符限制的边界。

我该怎么做?

示例

string: "A test sentence containing an ngram and ending with a period. Another sentence that does not have the word we're searching for and runs on until we're past 100 characters."

regex: /\bngram(.{0,100})(\.|\b)/i

desired output: ' and ending with a period'

在这种情况下,我的正则表达式返回“并以句点结束。另一句话没有我们正在搜索和运行的单词。”它比我想要的更长,因为它是句点/字边界捕获组是贪婪的(可能?)。我不知道如何限制较短的比赛,而不是最长的比赛。

1 个答案:

答案 0 :(得分:1)

使用排除点的否定字符类!

/\bngram([^.]{0,100})(\b|\.)/i