2017-07-17 77 views
1

所有的多行记事本+ 2特定的词与词之间,提取字符串/数据在数据

我一直在试图提取使用正则表达式搜索和替换在记事本2名特定的词++之间的文本,但没有运气,

它让我发现,我试图寻找堆栈溢出,随后通过几个问题,但没有运气的最后一场比赛,我的数据是

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可以查看它并告诉我在这里丢失了什么。

+0

我无法在我的系统上复制此问题。你打勾了吗?匹配换行符选项? –

+0

那么,如果你不打开*'.'匹配换行*,它不会取代任何东西。 –

回答

0

你需要做的捕获组比赛里面.任何字符,包括换行:

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

(?s:...)调节基团与DOTALL标志开启后就会使.匹配任何字符,包括换行符。 .匹配换行符必须为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子串和
  • .* - 该行的其余部分。
+1

谢谢@ wiktor-stribizew,它工作正常。 –

+0

@RaviMiddha我添加了完整的模式说明。 –