在有人说之前,我知道我应该使用合适的解析器,但对于我的用例,最好使用正则表达式。
我有以下正则表达式来尝试匹配 html 标签之外的文本:
(?<!<[^>]*)(?<Text>.+?)
然而,这似乎与标签的左括号匹配,即 <
.我该如何解决这个问题?
示例输入:
<span style="color:blue">some <strong>bold</strong> text</span>
预期:
some bold text
得到:
<some <bold< text<
最佳答案
问题是您正在使用 .
匹配任何字符。将其替换为否定字符类,例如 [^<>]
匹配除 <
以外的任何字符和 >
并使用贪婪量词 *
(匹配 0 次或多次出现)或 +
(匹配 1 次或多次出现):
(?<!<[^>]*)(?<Text>[^<>]*)
参见 regex demo
顺便说一句,使用 (?<Text>.+?)
在模式的末尾只使正则表达式引擎匹配自 +?
以来的 1 个字符是一个惰性量词匹配 1 次或多次出现但尽可能少(因为 1 就足够了,它总是只匹配 1 个字符)。通常,在这样一个延迟量化的模式之后必须有一些其他模式,否则,它通常不会获取正确的文本。
关于c# - 匹配 html 标签之外的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41612945/