2009-05-29 18 views
0

ASP.Net 2.0アプリケーションでVB.Netを使用して、不要なマークアップを削除する正規表現を実行しています。私は削除したいRegExを使用して終了タグとHTMLの開始タグを正しく一致させる

<span>Lorem <span class="special">ipsum</span> dolor sit amet.</span> 

output = Regex.Replace(output, "<span\s*>(?<Text>.*?)</span>" & styleRegex, "${Text}", RegexOptions.Compiled Or RegexOptions.CultureInvariant Or RegexOptions.IgnoreCase Or RegexOptions.Singleline) 

だから、このコンテンツのために:私がやりたいことの一つは、それらのいずれかの属性を持っていないスパン要素を削除しています外側のスパン要素

Lorem <span class="special">ipsum dolor sit amet.</span> 

正規表現でこれは可能ですか、私はもう少し高度なものを実装する必要があります:クロージングスパンが、それは全体の来る最初のものは一致しているので残念ながら、私の正規表現は、上記の私のこれは、結果として得られ?

+8

これは「正規表現でHTMLを解析できますか?」というトピックの繰り返しですので、これをコメントとして投稿しています。正規表現では入れ子構造を認識できません。言語(例えば「入れ子構造」)を認識したい場合は、是非パーサーを使用してください。あなたの正規表現で見られる動作は、正規表現だけで得られるほど近いです。 – Tomalak

+0

Tomalakのコメントには、先週だけでこれが何回も出てきたので、多くのアップフォートを提供したいと思います。 – Svante

+0

私の質問への答えはそうですね。いいえ、はい。 以前に尋ねられた同様の質問のいずれかに、VB.Net/Asp.Net 2.0のコードに関する回答がありますか? – travis

答えて

0

入力は常に有効なXMLではないかもしれないとHTML Agility Pack on Codeplexはかなり甘い見えますが、この場合には本当にやり過ぎであるため、XSLTはオプションではありません。ここに私が使用して終了し、最終的な正規表現です:

<span\s*>(?<Text>.*?(?:<span[^>]*>.*?</span>.*?)*)</span> 

${Text}と効果的に私がテストしたすべての場合には無用の外側にspanタグを剥奪することを交換します。

0

正規表現ではなくXSLTを使用します。

.NETはXSLT(google:xslt vb.net)をサポートしているようですが、非XHTMLを解析するかどうかはわかりません。標準のxsltprocコマンドは、 - htmlフラグとともに使用されます。

2

不幸なことに、正規表現にはこの機能がありません。そのようなものを表現するには、少なくとも文脈依存言語が必要です。 (theoretical stuffのために申し訳ありません)

代わりにXSLTを使用することを提案します。

関連する問題