2012-02-09 1 views
0

正規表現にはあまり慣れていませんが、ASP.Netで何かを達成しようとしています。2つの特定の文字列の間でHTMLを取得する正規表現

私はHTMLファイルを読み込み、何らかの処理を行い、新しい「マージされた」HTMLを出力しています。私が苦労している部分は、自分の作成した2つの定義済みの "タグ"の間にあるコードの集まりです。ここで

は、関連する入力HTMLの例です:

<table style="width: 500px; font-family: Trebuchet MS, sans-serif; font-size: 13px; background-color: #fff; border: 0; border-collapse: collapse;" align="center" cellspacing="0"> 
<thead> 
<tr> 
<th colspan="3" style="text-align: left;border-bottom: 1px solid #DDDDDD;"> 
Add-ons 
</th> 
</tr> 
</thead> 
<tbody> 
[AddonsListSTART] 
<tr style="border-bottom: 1px dashed #DDDDDD;"> 
<td>[AddonName]</td> 
<td>[AddonQty]</td> 
<td align="right">[AddOnPrice]</td> 
</tr> 
[AddonsListEND] 
</tbody> 
</table> 
<br /> 

これは私のC#コードである:「htmlAddonsは」文字列に等しくなるようにするために、私は起こるしたい何

//Find Add-ons HTML : between [AddonsListSTART] & [AddonsListEND] 
Regex rgxAddonSE = new Regex(@"\[AddonsListSTART\](?<MyHtml>.*)\[AddonsListEND\]"); 

Match matchAddonSE = rgxAddonSE.Match(htmlEmail); 

string htmlAddons = matchAddonSE.ToString(); 

です:

<tr style="border-bottom: 1px dashed #DDDDDD;"> 
<td>[AddonName]</td> 
<td>[AddonQty]</td> 
<td align="right">[AddOnPrice]</td> 
</tr> 

問題は常に空白で、「matchAddonSE.Success」は常にFALSEです。私は正規表現に何か問題があることを知っていますが、私は何が分かりません。

ご協力いただきありがとうございます。

ヘザー

+0

アハ内からシングルラインモードを用いる以外

//Find Add-ons HTML : between [AddonsListSTART] & [AddonsListEND] Regex rgxAddonSE = new Regex(@"\[AddonsListSTART\](?<MyHtml>.*)\[AddonsListEND\]", RegexOptions.Singleline); Match matchAddonSE = rgxAddonSE.Match(htmlEmail); string htmlAddons = matchAddonSE.ToString(); 

同じこと!サイドバーに表示される役に立つリンクは私に答えてくれます:http://stackoverflow.com/questions/4000508/regex-expression-that-will-capture-everything-between-two-characters-including-m-この正規表現新しいRegex(@ "\ [AddonsListSTART \](? [\ s \ S] *)\ [AddonsListEND \]") ' –

答えて

0

問題は*に改行が含まれていないことです。テキストに一度出現するような事前定義されたラベルの正規表現は、最善の方法ではないかもしれませんが、単にIndexOfを見つけて部分文字列を使用するだけではありません。 sが[\ Fと同じです\ \ S \ Sを使用して

あなたはまだ、\ rを\ n個の意味の追加正規表現を使用したい場合は、[します。\ r \ n] *はかなり

と同じようにあなたを与えるだろう\ n \ r \ t \ v]をクリックします。

\ Sは[^ \ f \ n \ r \ t \ v]と同等です。

別のオプションは、正規表現マッチをシングルラインモードに設定することです。 (名前は混乱しますが、実際にはドット "。"が新しい行を取得することを意味します)

以下は部分文字列の使用例です。ここ

String startTag = "[AddonsListSTART]"; 
String endTag = "[AddonsListEND]" 
int start = htmlEmail.IndexOf(startTag); 
int end = htmlEmail.IndexOf(endTag); 
String res =""; 
if((start>=0) && (end>=0)){ 
    res = htmlEmail.substring(start + startTag.length,end - (start + startTag.length)); 
} 

シングルラインモードの使用方法である:(RegexOptions.Singlelineに注意してください)パターン

Regex rgxAddonSE = new Regex(@"(?s)\[AddonsListSTART\](?<MyHtml>.*)\[AddonsListEND\]"); 
関連する問題