c# - 起点和终点内的条件过滤

标签 c# asp.net regex

我有如下 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>)"
          ^^^^^^^^^^^^^

感兴趣的部分是(?:.(?!\*/))* .

  1. (?:foo)只是一个非捕获组 - 现在您可以假装它只是 (foo) .
  2. .通配符并匹配任何单个字符。
  3. (?!bar)被称为否定先行断言 - 它匹配 if bar 跟随,并且是一个零宽度表达式它在匹配时不消耗任何字符。

所以,我们的想法是匹配一串字符,.后跟 */ ,并且只有那么 */</div> .

关于c# - 起点和终点内的条件过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19535270/

相关文章:

c# - 从 SessionFactory 获取 ConnectionProvider

c# - 方法组重载决议与方法调用重载决议有何不同?

c# - 如何将文本框值分配给gridview

regex - 字符串中间的正则表达式

Javascript 正则表达式匹配以某些字符结尾但不以这些字符的特定组合结尾的字符串

c# - 单击按钮上传图像

c# - 在包含两个图像的 Canvas 上更改 UIElement.CaptureMouse() 的调用顺序时,我得到不同的结果

c# - 输入字符串的格式不正确,Requiredfieldvalidator 无法正常工作

c# - 为什么在 MVP 中使用 Presenter 接口(interface)?

用于匹配 URL 行尾或 "/"字符的正则表达式