如何在一个由开头和结尾语句括起来的部分中捕获多个正则表达式匹配

时间:2017-10-23 18:24:54

标签: regex

我试图捕获文本文件特定部分中特定值的每个实例,但仅限于该部分,我不确定如何处理它。

一个例子是捕获" Banana"的所有实例。只在"第2节和第34节;以下文字

Section1
Cat Dog Bear Banana Orange
Cat Dog Bear Banana Car

Section2
Cat Dog Bear Banana Waffle
Cat Dog Bear Banana Truck

Section3
Waffle Bear Bear Banana Truck
Cat Dog Bear Banana Pie

我非常确定我应该从第2节(?:Section2)的非捕获组开始,然后是Banana (Banana)的捕获块,然后是第3节的另一个非捕获组{ {1}}。虽然这引起了我的不满,但是这两个事情已经发生了。

有没有人会建议我如何创建一个正则表达式来匹配某些事物的实例,但只能在一段由开头和结尾标记的文本中?

1 个答案:

答案 0 :(得分:2)

您可以使用\G(边界锚点)来使用此正则表达式:

(?:^Section2$|(?<!^)\G).*?\KBanana(?=.*^Section3$)

RegEx Demo

RegEx分手:

  • (?::启动非捕获组
    • ^Section2$:将一行与Section2
    • 匹配
    • |:或
    • (?<!^)\G:断言上一场比赛结束
  • ):结束非捕获组
  • .*?:匹配零或多个任何内容(懒惰)
  • \K:重置匹配的数据
  • Banana:匹配文字文字Banana
  • (?=.*^Section3$):要先断言,我们前面有Section3