【问题标题】:Excluding 2 words from search - match /word/ but not /a word/从搜索中排除 2 个单词 - 匹配 /word/ 但不匹配 /a word/
【发布时间】:2019-01-14 05:24:55
【问题描述】:

我需要在我的语料库中搜索单词game,但我想指定搜索以排除单词的一种用法:a game。所以实际上我需要排除字符串 a+space+game

我试图编写正则表达式搜索字符串,但没有成功: \bgame\b^(?!.*?[a gam]).*

如果我问的问题之前已经回答过,我很抱歉。问题是我不确定要寻找什么才能得到答案。

【问题讨论】:

  • 你用什么工具/语言来实现这个正则表达式?
  • 我在这个特殊情况下使用 AntConc

标签: regex


【解决方案1】:

game 前面没有a_?您可以使用否定的lookbehind。

(?<!a\s)game

演示:https://regex101.com/r/2PQi1B/2

Wiktor Stribiżew 建议的更准确的版本(明确匹配边缘情况的单词边界):

r'(?<!\ba\s)\bgame\b 

【讨论】:

  • @Wiktor, @COLDSPEED:你能解释一下r' 的作用吗?
  • @mickmackusa:这将匹配degame
  • @Wiktor 谢谢。这是一个正则表达式定义还是来自另一种语言?
  • 抱歉有点混乱:我建议使用(?&lt;!\ba\s)\bgame\b来匹配整个单词game,如果它前面没有不定冠词a(也作为一个完整的单词)。另请注意,如果有 2 个或更多空格,除非引擎支持无限宽度的后视(.NET、PyPi Python 正则表达式),否则这种负向后视方法将不起作用。
  • 我还有一个查询 - 我需要从我的搜索实例中排除,例如“a great game”。我试图指定 grep,但我想我一定做错了什么......: (?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-17
相关资源
最近更新 更多