2015-12-02 59 views
1

我無法匹配嵌套的捕獲組多次,結果只給我最後內部捕獲。正則表達式無法匹配內部可重複事件

輸入字符串:=F2=0B=E2some text =C2=A3
正則表達式:(\=([0-9A-F][0-9A-F]))+

的捕獲組返回是:

組1:

  • =F2=0B=E2
  • =C2=A3

組2:

  • E2
  • A3

但我需要2組返回:

  • F2
  • 0B
  • E2

  • C2
  • A3
每個外組內

這可能不知?

+0

什麼是編程語言?請注意,您無法在Group2中獲得這些'F2','0B'值,您可以在Group2 * Captures *中獲取它們。 –

+0

@stribizhev .NET C#實際上 – silkfire

回答

2

您只需訪問match.Groups[2].Captures集合。

regex demo

enter image description here

你需要的是一個CaptureCollection。看到此Regex.Match reference

Captures
獲取通過拍攝組相匹配的所有捕獲的集合,在最內側的最左邊的一階(或最內最右邊的一階如果正則表達式與改性RegexOptions.RightToLeft選項)。該集合可能有零個或多個項目。(繼承自Group。)

這裏是一個sample demo輸出從Groups[2] CaptureCollection(F20BE2C2A3)全部捕獲:

var pattern = "(=([0-9A-F]{2}))+"; 
var result = Regex.Matches("=F2=0B=E2some text =C2=A3", pattern) 
      .Cast<Match>().Select(p => p.Groups[2].Captures) 
      .ToList(); 
foreach (var coll in result) 
    foreach (var v in coll) 
     Console.WriteLine(v); 
+0

非常感謝!所以這隻有在.NET中才有可能? – silkfire

+0

從我所知道的,PyPi Python * regex *模塊中也有可能,但我從來沒有使用過。請注意,爲了不重複'[0-9A-F]',我使用限制量詞'{2}'縮小了一下正則表達式。 –