我有如下 2 个字符串:
test1 = "<div>/*abc*/</div>";
test2 = "<div>/*abc*/Contents/*efg*/</div>";
我需要消除所有/*...*/
,如果div
仅包含/*,则
。
以下是我所做的正则表达式:div
将被删除...*/
Regex rx1 = new Regex(@"<div>/\*[^>]+\*/(</div>|<br/></div>|<br></div>)");
TemplateEditorFormatted = rx1.Replace(TemplateEditorFormatted, match => { return String.Empty; });
对于字符串test1
,它返回正确的结果,删除所有内容。
但是对于test2
,它还会删除所有内容。估计结果不应删除任何内容。
已更新(供学习)
对于测试 2,如果我想消除/../但不是整个 div。正则表达式是什么样的?
有人可以帮忙吗?谢谢
最佳答案
您最好使用否定前瞻断言:
@"<div>/\*(?:.(?!\*/))*\*/(</div>|<br/></div>|<br></div>)"
^^^^^^^^^^^^^
感兴趣的部分是(?:.(?!\*/))*
.
(?:foo)
只是一个非捕获组 - 现在您可以假装它只是(foo)
..
是通配符并匹配任何单个字符。(?!bar)
被称为否定先行断言 - 它匹配 ifbar
不跟随,并且是一个零宽度表达式,即它在匹配时不消耗任何字符。
所以,我们的想法是匹配一串字符,.
,不后跟 */
,并且只有那么 */</div>
.
关于c# - 起点和终点内的条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535270/