c# - 匹配 html 标签之外的文本

标签 c# html regex

在有人说之前,我知道我应该使用合适的解析器,但对于我的用例,最好使用正则表达式。

我有以下正则表达式来尝试匹配 html 标签之外的文本:

(?<!<[^>]*)(?<Text>.+?)

然而,这似乎与标签的左括号匹配,即 < .我该如何解决这个问题?

示例输入:

<span style="color:blue">some <strong>bold</strong> text</span>

预期:

some bold text

得到:

<some <bold< text<

Link to RegexStorm.

最佳答案

问题是您正在使用 .匹配任何字符。将其替换为否定字符类,例如 [^<>]匹配除 < 以外的任何字符和 >并使用贪婪量词 * (匹配 0 次或多次出现)或 + (匹配 1 次或多次出现):

(?<!<[^>]*)(?<Text>[^<>]*)

参见 regex demo

顺便说一句,使用 (?<Text>.+?)在模式的末尾只使正则表达式引擎匹配自 +? 以来的 1 个字符是一个惰性量词匹配 1 次或多次出现但尽可能少(因为 1 就足够了,它总是只匹配 1 个字符)。通常,在这样一个延迟量化的模式之后必须有一些其他模式,否则,它通常不会获取正确的文本。

关于c# - 匹配 html 标签之外的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612945/

相关文章:

c# - 在 asp.net 的子母版页中设置控件可见性的问题

c# - 从字符串末尾开始的字符串的子字符串

css - IE中的透明div

regex - 使用 Perl 正则表达式搜索并替换特定长度的字符串

c - Emacs 将 (*ptr_to_struct).member_var 替换为 ptr_to_struct->member_var

c# - "Mocking out"在使用 Fakes 时调用正在测试的方法中的私有(private)方法

c# - 在异常期间捕获原始 HTTP POST 数据

android - getString() 和 getText() 有什么区别?

html - 如何在不更改样式的情况下向我的导航添加 Bootstrap 响应功能

ruby-on-rails - 正则表达式检测基本 SQL 注入(inject),但不能作为防止 SQL 注入(inject)的手段