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

関連する問題