我有一个自然语言的文本文件,其中填充了不同标签形式的封装数据。例如:
<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;
}
谢谢!
答案 0 :(得分:1)
您可以使用Regex反向引用来捕获标记:
var tags = Regex.Matches(input, @"<([_a-zA-Z]+)>.*<\/\1>");
第一个捕获组([_a-zA-Z]+)
将匹配标记名称(对XML名称的限制比此更多,但这只是一个允许字母和下划线的简单示例) - 以及反向引用\1
将结束标记与第一个捕获组匹配。