2017-07-17 70 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我添加了完整的模式說明。 –