我想捕获所有没有特定标签的标签

时间:2009-06-25 09:19:14

标签: c# .net regex

我想捕获名为'STRONG'的所有标签我可以使用<STRONG.*?</STRONG>这工作得很好但我不想捕获这些标签如果'SPAN'标签进入这些标签我想要像{{ 1}} 这是示例文本

<STRONG.*(^(SPAN)).*?</STRONG>

我想要捕获第二个强标记,而不是第一个

4 个答案:

答案 0 :(得分:5)

您正在尝试使用正则表达式解析HTML结构,因为HTML语言不规则,所以注定要失败(请参阅hierarchy of formal languages)。

改为使用HTML解析器,例如HTML Agility Pack。另请参阅these other questions

答案 1 :(得分:3)

康拉德是对的。

但是如果你不关心迫在眉睫的厄运,你可以试试像

这样的东西
/<STRONG>\w+?<\/STRONG>/

如果STRONG标签包含任何不是单词字符的内容,例如'<'的{​​{1}},它将忽略STRONG标记,但无疑会因任何异常而失败...回到关于注定失败的尝试。

答案 2 :(得分:2)

这是XPath的典型用例。查询可以是例如:

**/strong[not(child::span)]/text()

答案 3 :(得分:0)

如果您只是想知道如何匹配不包含特定字符序列的文本,这是最常见的方式:

Regex re = new Regex(@"<STRONG(?:(?!<SPAN).)*?</STRONG>",
    RegexOptions.IgnoreCase | RegexOptions.Singleline);
相关问题