在多行数据中提取notepad ++中2个特定单词之间的字符串/数据

时间:2017-07-17 07:28:08

标签: regex notepad++

所有

我一直在尝试使用RegEx搜索和替换在Notepad ++中的两个特定单词之间提取文本,但没有运气,

它给了我找到的最后一个匹配,我试过搜索Stack Overflow并且跟着几个问题但没有运气,我的数据是

Open options for my word1
 My Text1
My Text1 Second Line
My Text1 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
  My Text2
My Text2 Second Line
My Text2 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
 My Text3
My Text3 Second Line
My Text3 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
 My Text4
My Text4 Second Line
My Text4 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
 My Text5
My Text5 Second Line
My Text5 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
 My Text6
My Text6 Second Line
My Text6 Third Line
 Word2 My Fixed Text   Word3

Open options for my word1
 My Text7
My Text7 Second Line
My Text7 Third Line
 Word2 My Fixed Text   Word3

我的正则表达式是.*word1(.*?)Word2.*,我用$ 1替换它

它为我提供了最后一次正则表达式匹配的文本,Can Someone可以查看它并告诉我在这里缺少什么。

1 个答案:

答案 0 :(得分:0)

您需要使捕获组内的.匹配任何字符,包括换行符:

.*word1((?s:.*?))Word2.*
        ^^^^^^^^

打开DOTALL标记的(?s:...)修饰符组会使.匹配任何字符,包括换行符。 .匹配换行符必须为OFF (请参见下面的屏幕截图)。要使模式工作而不管 .匹配换行符选项,请在模式中使用每个.的修饰符组:(?-s:.*)word1((?s:.*?))Word2(?-s:.*)(其中(?-s:...) }在修饰符组中转换DOTALL行为。)

(?s:.*?)模式的等价物是[\s\S]*?[\w\W]*?[\d\D]*?),但使用修饰符似乎是解决此问题的更原生的方法。

enter image description here

模式详情

  • .* - 除了换行符之外的任何字符,尽可能多,直到最后
  • 一行
  • word1 - word1
  • ((?s:.*?)) - 第1组匹配任何0+字符,尽可能少到第一个...
  • Word2 - Word2 substring和
  • .* - 其余部分。