我無法匹配嵌套的捕獲組多次,結果只給我最後內部捕獲。正則表達式無法匹配內部可重複事件
輸入字符串:=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
。
這可能不知?
我無法匹配嵌套的捕獲組多次,結果只給我最後內部捕獲。正則表達式無法匹配內部可重複事件
輸入字符串:=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
。
這可能不知?
您只需訪問match.Groups[2].Captures
集合。
你需要的是一個CaptureCollection。看到此Regex.Match
reference:
Captures
獲取通過拍攝組相匹配的所有捕獲的集合,在最內側的最左邊的一階(或最內最右邊的一階如果正則表達式與改性RegexOptions.RightToLeft
選項)。該集合可能有零個或多個項目。(繼承自Group。)
這裏是一個sample demo輸出從Groups[2]
CaptureCollection(F2
,0B
,E2
,C2
,A3
)全部捕獲:
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);
非常感謝!所以這隻有在.NET中才有可能? – silkfire
從我所知道的,PyPi Python * regex *模塊中也有可能,但我從來沒有使用過。請注意,爲了不重複'[0-9A-F]',我使用限制量詞'{2}'縮小了一下正則表達式。 –
什麼是編程語言?請注意,您無法在Group2中獲得這些'F2','0B'值,您可以在Group2 * Captures *中獲取它們。 –
@stribizhev .NET C#實際上 – silkfire