【问题标题】:Match max 5 words before and after a certain word匹配某个单词前后最多 5 个单词
【发布时间】:2011-03-08 20:28:37
【问题描述】:

我需要一个正则表达式,它最多可以匹配某个单词前后的 5 个单词。示例:

某个词是“the”

字符串是“John Ely 为道奇队首发,而老朋友 Takashi Saito 为酿酒人队首发,这对密尔沃基来说基本上是一场牛棚比赛。”

应该有2个结果:

约翰·伊利 (John Ely) 为 道奇队首发,而老朋友 Takashi

Takashi Saito 开始为 the Brewers 准备什么

有什么想法吗???

谢谢

【问题讨论】:

  • “单词”是什么意思?这是一个非常模糊的术语,因为它在不同的语言中意味着不同的东西,而在正则表达式中则意味着其他东西。

标签: regex


【解决方案1】:
(?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,5}the(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,5}

但是请注意,大多数正则表达式引擎不会处理重叠匹配。

【讨论】:

  • 所以,要确保单词 the 是实际单词,而不是单词“论文”或“父亲”的一部分,如何修改正则表达式?基本上我们只需要确保它周围没有其他字母,标点符号或空格都可以。谢谢!
  • @user417669 在搜索词的任一侧添加词边界 \b 以强制只匹配整个词。 (?:[a-zA-Z'-]+[^a-zA-Z'-]+){0,5}\bthe\b(?:[^a-zA-Z'-]+[a-zA-Z'-]+){0,5}
【解决方案2】:

对于所提出的问题,这似乎是可行的。 (?:\s*\w+\s+){0,5}the(?:\s*\w+\s*){0,5}

【讨论】:

  • @Jesper 我想了(?:\s*\w+\W?\s*){0,5}the(?:\s*\w+\W?\s*){0,5},但也许逗号(,)标志着一个命题的结束,而问题的作者只想保留命题中的单词。除此之外,是的,正如你所说,人们可以看到它。谢谢。
  • 请在此答案中添加更多详细信息,以便提问者能够理解。
  • @dsillman2000 你指的是原始答案还是评论?
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
相关资源
最近更新 更多