我想捕获名为'STRONG'的所有标签我可以使用<STRONG.*?</STRONG>
这工作得很好但我不想捕获这些标签如果'SPAN'标签进入这些标签我想要像{{ 1}}
这是示例文本
<STRONG.*(^(SPAN)).*?</STRONG>
我想要捕获第二个强标记,而不是第一个
答案 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);