2016-04-05 181 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