[英]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.