簡體   English   中英

C#Regex.Replace不替代

[英]C# Regex.Replace does not replace

對於您的天才我有一個小問題。

我已經使用“ RegexLab”測試了一種用於替換/過濾文本的模式。 它在那里工作得很好,但是我的代碼做得不好。

圖案:

<li>(.*?)<ul>.*?</ul>

替代

<li>$1

輸入:

<b>Title</b>\n<br/>\n<ul><li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n</ul>\n<b>Title</b><br/>\n<ul><li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n</ul>

輸出應該是什么樣的:

<b>Title</b>\n<br/>\n<ul><li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n</ul>\n<b>Title</b><br/>\n<ul><li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n<li>Text\n</li>\n</ul>

我的代碼:

string filteredText = Regex.Replace(Input, Pattern, Replacement);

問題:

我的輸出是錯誤的,我沒有得到過濾的文本,得到了整個未過濾的輸入。 RegexLab向我展示了一切正確。

整個代碼(這里看起來很臟)

           string input = "<b>Title</b>\n<br/>\n<ul><li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n</ul>\n<b>Title</b><br/>\n<ul><li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n<li><b>Text</b>\n<ul><li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n<li>Trash</li>\n</ul>\n</li>\n</ul>";
        string pattern = @"<li>(.*?)<ul>.*?</ul>";
        string replacement = "<li>$1";
        string filteredText = Regex.Replace(input, pattern, replacement);

PHP中的工作代碼(C#中需要):

preg_replace("/<li>(.*?)<ul>.*?<\/ul>/s",'<li>$1',$input);

我需要沒有HtmlAgilityPack的解決方案!

嘗試:

Regex.Replace(input, pattern, replacement, RegexOptions.Singleline);

您需要讓解釋器將整個字符串視為單行文本,否則為. (點)與\\n (換行符)不匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM