簡體   English   中英

C#正則表達式組麻煩

[英]C# regex groups trouble

對不起,這可能是一個愚蠢的問題,但是我無法解決小問題,也無法在Google中找到相同的問題。 所以,我想寫在這里。 我需要解析相同的字符串:

string line = "HELLO MYNAME IS1 = {P 111.11, O -222.22, L 333.33, L -444.44, Y 555.55}";

我的代碼是:

string line = "HELLO MYNAME IS1 = {P 111.11, O -222.22, L 333.33, L -444.44, Y 555.55}";
Regex re = new Regex(@"^HELLO MYNAME ([A-Za-z0-9]+) = {([A-Z]\s[+-]?[0-9]+.[0-9]+,?\s?)+}");
MatchCollection matchCollection = re.Matches(line);
foreach(Match m in matchCollection)
{
    Console.WriteLine("Match: ");
    foreach(Group gr in m.Groups)
    {
        Console.WriteLine($"No {gr.Index} Value: {gr.Value}");
    }
 }

但是我不明白為什么輸出看起來像這樣:

比賽:

否0值:HELLO MY NAME IS1 = {P 111.11,O -222.22,L 333.33,L -444.44,是555.55}否13值:IS1否62值:是555.55

再次抱歉,您能不能向我解釋為什么只有最后一組才有結果。

根據定義,重復捕獲組將僅捕獲最后一次迭代。
將捕獲組放在重復的組周圍以捕獲所有迭代:

^HELLO MYNAME ([A-Za-z0-9]+) = {(([A-Z]\s[+-]?[0-9]+.[0-9]+,?\s?)+)}

您應該獲取組1的值以獲取第一個捕獲組捕獲的值,並獲取第二個捕獲組捕獲的所有捕獲

string line = "HELLO MYNAME IS1 = {P 111.11, O -222.22, L 333.33, L -444.44, Y 555.55}";
Regex re = new Regex(@"^HELLO MYNAME ([A-Za-z0-9]+) = {([A-Z]\s[+-]?[0-9]+.[0-9]+,?\s?)+}");
MatchCollection matchCollection = re.Matches(line);
foreach(Match m in matchCollection)
{
    Console.WriteLine("Match: ");
    Console.WriteLine(m.Groups[1].Value);
    foreach (Capture cap in m.Groups[2].Captures)
        Console.WriteLine($"No {cap.Index} Value: {cap.Value}");
}

參見C#演示

輸出:

Match: 
IS1
No 20 Value: P 111.11, 
No 30 Value: O -222.22, 
No 41 Value: L 333.33, 
No 51 Value: L -444.44, 
No 62 Value: Y 555.55

暫無
暫無

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

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