2013-07-08 22 views
0

我有以下工作模式:如何添加新的命名組?

String pattern = @"<(?<field>[^/>]+)>(?<data>.*)</\k<field>>"; 


String tcSQML = "<Pri_Key1>62</Pri_Key1><First1>SAM</First1><Last1>SPADE</Last1> <GstNo1></GstNo1><Pri_Key2>63</Pri_Key2><First2>TONY</First2><Last2>TUNE</Last2><GstNo2></GstNo2><Pri_Key3>64</Pri_Key3><First3>FRANK</First3><Last3>FAST</Last3><GstNo3></GstNo3><Pri_Key4>65</Pri_Key4><First4>BILLIE</First4><Last4>BLADES</Last4><GstNo4></GstNo4>"; 
    MatchCollection matches = Regex.Matches(tcSQML, pattern, RegexOptions.Singleline); 
    foreach (Match m in matches) 
    { 
     Console.WriteLine(m.Groups["field"].ToString()); 
     Console.WriteLine(m.Groups["number"].ToString()); 

    } 

我要的是能夠在後場也可拍攝數量。例如。在pri_key1 pri_key應該是字段,1應該是數字。我無法弄清楚如何將這個新的數字組引入這種模式。我嘗試了一些變化,沒有任何作品。我對RegEx不太好,所以幫助和解釋是值得讚賞的。

回答

1

這是未經測試:

String pattern = @"<(?<field>[^0-9/>]+)(?<number>[^/>]*)>(?<data>.*)</\k<field>\k<number>>"; 

我只是增加了一個新的組字段元素後面。新的字段元素匹配任何不包含數字或字符的字符串或/>字符。數字元素匹配字段和標籤末尾之間的任何內容。

+0

謝謝,這很快,它的作品!我在LinqPad進行測試。 – Naomi

+0

如果字段標籤已知,如何更改此模式?假設這是一個新字符串 「 62 63」; 因此,我的標籤是Del_Pri_Key – Naomi

+0

只需刪除'(? [^ 0-9 />] +)'並將其替換爲已知的標籤名稱。您還必須使用標籤名稱替換'\ k '。 – fehnomenal