簡體   English   中英

另一個MultiLine Group正則表達式查詢

[英]Yet Another MultiLine Group Regex Query

因此,我試圖編寫一個正則表達式來過濾特定摘要的文本文件(尋找速度而不是蠻力)。

我想從每場比賽中得到三件事:

  • 識別代碼段的關鍵
  • 一種可選的語言來格式化每個片段
  • 代表開始和結束標簽之間所有行的

這是正則表達式(可以在此處找到失敗的測試工具-https : //gist.github.com/shiftkey/5236161 ):

(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*[\\n](?<value>.*?)[\\n].*end code (?<key>[A-Za-z-]*)

使用以下選項: RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline RegexOptions.Compiled | RegexOptions.ExplicitCapture | RegexOptions.Multiline

所以這樣的文件:

// code start foo csharp
var x = 1;
// end code foo 

給我期望值:

  • :foo
  • 語言 :csharp
  • var x = 1;

但是,當我引入第二行的代碼片段時,我只會得到最后一行:

// code start foo csharp
var x = 1;
var y = 2;
// end code foo 
  • :foo
  • 語言 :csharp
  • var y = 2;

代替

  • var x = 1;\\r\\nvar y = 2; (或類似)

讓小組涵蓋多行內容時,我錯過了什么?

我已經看過在SO上提出的類似情況,但是這些情況不適用於我的用法。

可以通過更改兩個.*的貪婪來解決此問題:

(?s)code start (?<key>[A-Za-z-]*) (?<language>[A-Za-z]*).*?[\n](?<value>.*)[\n].*?end code (?<key>[A-Za-z-]*)

閱讀語言后的.*一定不要太貪婪,因為我們需要在第一行后加上內容作為摘要值。 但是,用於解析value.*可能會更加貪婪,因為它不應該在遇到第一個\\n停止,因此是上面的模式。

如果您願意的話,還可以使用一些環顧四周的東西進行捕捉...

(?<=code\sstart\s)(?<key>\b\w+\b)\s(?<language>\b\w+\b).*\r\n(?<content>(?s).*)(?=\r\n.*end\scode\s\1\s-->)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM