1

RegEx を使用して C# のテキストを置き換える必要があります。

string strSText = "<P>Bulleted list</P><UL><P><LI>Bullet 1</LI><P></P><P>
<LI>Bullet 2</LI><P></P><P><LI>Bullet 3</LI><P></UL>"

基本的に私は取り除く必要があります

"<P>"

の間に導入されたタグ

"<UL><P><LI>", 
"</LI><P></P><P><LI>" and
"</LI><P></UL>"

削除を実行するときは、これらのタグ間のスペースも無視する必要があります。

そう

"</LI><P></P><P><LI>", "</LI>    <P></P><P><LI>", "</LI><P></P><P>   <LI>" or 
"</LI> <P> </P> <P> <LI>"

すべてを置き換える必要があります

"</LI><LI>"

この目的のために、次の正規表現一致を使用してみました。

strSText = Regex.Replace(strSText, "<UL>.*<LI>", "<UL><LI>", RegexOptions.IgnoreCase);
strSText = Regex.Replace(strSText, "</LI>.*<LI>", "</LI><LI>", 
RegexOptions.IgnoreCase);
strSText = Regex.Replace(strSText, "</LI>.*</UL>", "</LI></UL>", 
RegexOptions.IgnoreCase);

しかし、それは「貪欲な」一致を実行し、結果は次のようになります。

"<P>Bulleted list</P><UL><LI>Bullet 3</LI></UL>"

次に、「レイジー」マッチを使用してみました:

strSText = Regex.Replace(strSText, "<UL>.*?<LI>", "<UL><LI>", RegexOptions.IgnoreCase);
strSText = Regex.Replace(strSText, "</LI>.*?<LI>", "</LI><LI>", 
RegexOptions.IgnoreCase);
strSText = Regex.Replace(strSText, "</LI>.*?</UL>", "</LI></UL>", 
RegexOptions.IgnoreCase);

これにより、次の結果が得られます。

"<P>Bulleted list</P><UL><LI>Bullet 1</LI></UL>"

しかし、他のすべてのデータを保持する次の結果が必要です。

"<P>Bulleted list</P><UL><LI>Bullet 1</LI><LI>Bullet 2</LI><LI>Bullet 3</LI></UL>"
4

2 に答える 2