简体   繁体   English

C#Regex.Replace不替代

[英]C# Regex.Replace does not replace

I've got a little problem for you geniuses. 对于您的天才我有一个小问题。

I have tested a pattern with "RegexLab" for replacing/filtering text. 我已经使用“ RegexLab”测试了一种用于替换/过滤文本的模式。 It worked perfectly there, but my code didn't do well. 它在那里工作得很好,但是我的代码做得不好。

Pattern: 图案:

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

Replacement 替代

<li>$1

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>

What the output should be like: 输出应该是什么样的:

<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>

My code: 我的代码:

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

Problem: 问题:

My output is wrong, I don't get the filtered text, I get the whole unfiltered Input. 我的输出是错误的,我没有得到过滤的文本,得到了整个未过滤的输入。 RegexLab shows me that everything is right. RegexLab向我展示了一切正确。

Whole code (will look dirty here) 整个代码(这里看起来很脏)

           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);

Working code in PHP (needed in C#): PHP中的工作代码(C#中需要):

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

I need a solution without HtmlAgilityPack! 我需要没有HtmlAgilityPack的解决方案!

Try with: 尝试:

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

You need to have the interpreter to see to whole string as a single line text, otherwise . 您需要让解释器将整个字符串视为单行文本,否则为. (dot) will not match the \\n (line feed) (点)与\\n (换行符)不匹配

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM