C# 如何找到在文本前缀后包含特定文本的HTML div?

C# 如何找到在文本前缀后包含特定文本的HTML div?,c#,regex,html-parsing,html-agility-pack,C#,Regex,Html Parsing,Html Agility Pack,我有以下字符串: text0前缀text1text2text3text4 想知道它是否包含前缀后面的div中的text3: 前缀…文本3… 但我不知道ta是如何制作正则表达式的,因为我不能为C#+HtmlAgilityPack使用[^,您可以执行以下操作: InputString = Regex.Replace(InputString,"^(?:[^<]+?|<[^>]*>)*?prefix",""); HtmlDocument doc = new HtmlDocume

我有以下字符串:

text0前缀text1text2text3text4

想知道它是否包含前缀后面的div中的
text3

前缀…文本3…

但我不知道ta是如何制作正则表达式的,因为我不能为C#+HtmlAgilityPack使用
[^,您可以执行以下操作:

InputString = Regex.Replace(InputString,"^(?:[^<]+?|<[^>]*>)*?prefix","");

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(InputString);

HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[contains('text3')]");
这就利用了jQuery接受a的能力(尽管它似乎需要用
div
标记包装才能真正工作)。

如果关闭“贪婪”选项,您应该可以使用类似
前缀。*text3.
的东西(如果
允许有属性,请使用
前缀)*>*text3.*

为了考虑到不寻常的间距,
s在引号内,
在引号内等,可以对此进行许多改进

前缀…text3
这样的模式将更加困难。您可能必须捕获所有出现的
div
标记,以便计算在给定时间打开了多少
div
标记

编辑:哎呀,关闭贪婪选项并不总能给出正确的结果,即使是在上述示例之外的其他示例中。最好捕获所有出现的
div
标记,然后从那里开始。正如Peter在上文中指出的,HTML不是一个正则表达式,因此您不能使用正则表达式来完成您可能需要的所有操作。

这是我的新正则表达式:


前缀([^您不能(可靠地)使用)为此,请使用正则表达式,因为正如您所注意到的,正则表达式不处理非正则语言功能,例如HTML的嵌套等。您需要使用HTML DOM解析器-您尝试使用哪种语言?您可能想了解jqueryWhat语言?不同的语言支持不同的正则表达式功能,它们并不完全相同。即使正则表达式是错误的解决方案,好的解决方案的建议也需要了解您使用的语言。@Peter Boughton:如果有人问这个问题,这应该是一个自动的答案:)Poma,对于C#请看一看HtmlAgilityPack-通过
前缀拆分
,然后尝试解析其中一个子字符串,如果前缀出现在标记中,也可能导致解析错误。(不过,我没有使用jQuery,所以我不知道在这种情况下它会如何运行。)是的,这一点肯定不是很好,但我的大脑还没有清醒到能够想出一个合适的解决方案。
var InputString = '<div>text0 </div> prefix <div>text1 <strong>text2</strong> text3 </div> text4';

InputString = InputString.replace(/^.*?prefix/,'');

var MatchingDivs = jQuery('div:contains(text3)','<div>'+InputString+'</div>')

console.log(MatchingDivs.get());