我有以下工作模式:
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应该是数字。我无法弄清楚如何将这个新的Number组引入这种模式。我尝试了一些变化,没有任何作用。我对RegEx并不擅长,所以我很感激帮助和解释。
答案 0 :(得分:1)
那是未经测试的:
String pattern = @"<(?<field>[^0-9/>]+)(?<number>[^/>]*)>(?<data>.*)</\k<field>\k<number>>";
我刚刚在field元素后添加了一个新组。新字段元素匹配任何不包含数字或/
或>
字符的字符串。 number元素匹配字段和标记末尾之间的任何内容。