2009-04-10 56 views
26

我有一個包含一個(或多個)鍵/值對的XML文件。對於每一對我想提取的值是一個兩字節的十六進制值。如何從.NET RegEx中提取子字符串?

所以XML包含此片段:

<key>LibID</key><val>A67A</val> 

,我可以搭配使用下面的表達式,括號中爲ID。

Match match = Regex.Match(content, @"<key>LibID</key><val>([a-fA-F0-9]{4})</val>"); 

if (match.Success) 
{ 
    Console.WriteLine("Found Match for {0}\n", match.Value); 
    Console.WriteLine("ID was {0}\n", "Help me SO!"); 
} 

如何更改最後一部分,使其返回匹配的ID?

乾杯!

回答

48

我想你想

match.Groups[1].Value 

(作爲Dillie-O的評論指出,這是第1組,因爲組0總是整場比賽。)

短,但完整的測試方案:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
    Regex regex = new Regex("<key>LibID</key><val>([a-fA-F0-9]{4})</val>"); 
    Match match = regex.Match("Before<key>LibID</key><val>A67A</val>After"); 

    if (match.Success) 
    { 
     Console.WriteLine("Found Match for {0}", match.Value); 
     Console.WriteLine("ID was {0}", match.Groups[1].Value); 
    }  
    } 
} 

輸出:

Found Match for <key>LibID</key><val>A67A</val> 
ID was A67A 
+2

擊敗我吧。您已經在Andrew那裏使用了分組匹配,因此您可以輕鬆提取分組值。哦,爲了記錄,索引0包含整個字符串,這就是爲什麼你檢查索引1. – 2009-04-10 19:09:55

+0

非常感謝。我知道它在某個地方,我只是不知道在哪裏:) – 2009-04-10 19:10:58

1

添加grouping construct到你的表情......

<key>(?<id>LibID)</key><val>([a-fA-F0-9]{4})</val> 

,將捕獲的ID。但是,您需要在表達式中輸入正確的格式來表示實際的ID,因爲您的正則表達式只能捕獲「LibID」。

相關問題