【问题标题】:Match a specific line of text which is NOT followed by another specific line using regex使用正则表达式匹配未跟随另一特定行的特定文本行
【发布时间】:2018-07-04 18:01:11
【问题描述】:

请帮我找出以下正则表达式:

我有多个文本文件。其中一些文件有这两行文本:

我马上就要回家了

我明天请假

如果第一行存在,则应始终跟在第二行之后。但有时第二行会丢失。我需要搜索那些出现“我很快就要回家”的情况,而在它之后没有“我明天请假”这一行。我在 Eclipse 中使用文件搜索。由于它具有正则表达式支持,我试图弄清楚如何使用正则表达式匹配未跟随另一特定行的特定行。

请分享您对此的想法/解决方案。 亲切的问候。

【问题讨论】:

  • I am going home soon I am taking a dayI am going home soon I am taking a day tommorow 怎么样?

标签: regex eclipse search


【解决方案1】:

https://regex101.com/r/f2GWfH/2

I am going home soon(?=\s+I am taking a day off tomorrow) 将匹配

I am going home soon.
I am taking a day off tommorow

但不仅仅是I am going home soon.,它将匹配I am going home soon.,后跟I am taking a day off tommorow

另一方面,I am going home soon(?!\s+I am taking a day off tomorrow) 将匹配 I am going home soon. 后面没有 I am taking a day off tommorow

这些被称为负前瞻和正前瞻。

a(?=b) 是一个积极的向前看,它匹配 ab,或者 a 后跟 a b。

a(?!b) 是一个否定的前瞻,它匹配 ac,或者后面没有 b 的 a。

在您的情况下,负前瞻应该完美工作:)

【讨论】:

  • 正是我想要的!以及您链接到答案的如此方便的在线正则表达式工具!非常感谢!
  • @danR :) 如果有帮助记得点赞并标记为正确!
  • 嗨,Sheshank,我想知道您是否也知道如何进行部分匹配,例如如果我知道第一行以一些文本开头,那么在该行的中间某处有“回家”值,那么直到行尾还有一些其他文本。然后下一行也以一些未知的文本开头,然后在中间的某个地方有“请假一天”,然后在该行的末尾会有一些其他的文本。在这种情况下,当第二行没有跟随时,我如何使用负向查找来查找第一行? TIA。问候。丹。
  • 好的,这似乎对我有用:(回家。*\n)(?!。*不休息一天)
  • 抱歉没有看到您的留言
猜你喜欢
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多