隔离/识别字符串c#的封装部分(识别子字符串)

时间:2016-04-05 12:42:58

标签: c# .net string substring

我有一个自然语言的文本文件,其中填充了不同标签形式的封装数据。例如:

<Age>53 year old</Age> woman, well known since earlier. Currently under the care of
<First_Name>Sara</First_Name> <Last_Name>Storm</Last_Name> 
and dr. <First_Name>John</First_Name> <Last_Name>Beck</Last_Name>

提取所有标签及其数据的最佳方法是什么?我想要的输出是

 <Age>53 year old</Age>
 <First_Name>Sara</First_Name>
 <First_Name>John</First_Name>
 <Last_Name>Storm</Last_Name>
 <Last_Name>Beck</Last_Name>

我尝试使用遍历字符串的循环来查找标记的索引。由于我想将不同的标签和封装数据添加到列表中,因此该解决方案不合适:

string findFirstName = "<First_Name>";
string findLastName = "<Last_Name>";
string endFirstName = "</First_Name>";
string endLastName = "</Last_Name>";
string findAge = "<Age>";
string endAge = "</Age>";

int startIndex;
int endIndex;
int length;
foreach (Match m in Regex.Matches(pieceContent, findFirstName))
{      
    startIndex = m.Index;
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用Regex反向引用来捕获标记:

var tags = Regex.Matches(input, @"<([_a-zA-Z]+)>.*<\/\1>");

第一个捕获组([_a-zA-Z]+)将匹配标记名称(对XML名称的限制比此更多,但这只是一个允许字母和下划线的简单示例) - 以及反向引用\1将结束标记与第一个捕获组匹配。