2016-04-05 131 views
0

我有一个自然语言的文本文件,以不同标签的形式填充封装的数据。例如:隔离/识别字符串c#的封装部分(识别子字符串)

<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

为什么不使用XML解析器呢? –

+0

@SelmanGenç - 这不是XML。 – Quintium

回答

1

你可以使用正则表达式反向引用捕获标签:

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

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

+0

我必须说,这个反向引用是非常酷的。从来没有听说过它! – GuyMontag