Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 带有条件html标记的正则表达式_C#_Regex - Fatal编程技术网

C# 带有条件html标记的正则表达式

C# 带有条件html标记的正则表达式,c#,regex,C#,Regex,我需要编写一个正则表达式来捕获特定HTML标记中的内容: <span class="sentences">CAPTURE HERE</span> 在这里捕获 所以我用C写下: ((.| \\\\s)*?) 我遇到的问题是,我不知道如何解决它,在这个span中还有另一个span类,它也以结束,因此在错误的结束标记上结束捕获。如何在正则表达式中编写一个条件,检查是否有另一个span类不是“句子”,如果有,捕获应该在下一个span类结束 正则表达式上的输入字符串 <

我需要编写一个正则表达式来捕获特定HTML标记中的内容:

<span class="sentences">CAPTURE HERE</span>
在这里捕获
所以我用C写下:

((.| \\\\s)*?)
我遇到的问题是,我不知道如何解决它,在这个span中还有另一个span类,它也以结束,因此在错误的结束标记上结束捕获。如何在正则表达式中编写一个条件,检查是否有另一个span类不是“句子”,如果有,捕获应该在下一个span类结束

正则表达式上的输入字符串

<span class="sentence">O que a história da escravidão tem a dizer sobre <span class="CharOverride-15">experiências religiosas</span>?</span><span class="sentence"> Só silêncios,</span>
O que a história da escravidãO tem a dizer sobre experiências religiosas?苏塞利昂西奥斯,
我想要捕捉的是:

O que a história da escravidão tem a dizer sobre <span class="CharOverride-15">experiências religiosas</span>? Só silêncios,
O que a história da escravidãO tem a dizer sobre experiências religiosas?苏塞利昂西奥斯,

不要使用正则表达式解析html。使用真正的html解析器,如

作为练习(首选html解析库),下面是一个可以使用或不使用嵌套标记进行解析的正则表达式:

<([^>]+)(?:\s+[^>]*)?>[^<>]*?(?:<([^>]+)(?:\s+[^>]*)?>)?(?<capture>[^<>]+)(?:<\/\2>)?[^<>]*?<\/\1>
]+)(?:\s+[^>]*)?>[^]*?(?:]+)(?:\s+[^>]*)?>)(?[^]+)(?:)?[^]*?

有一些库可以为您处理“请求HTML、JSON等。正则表达式往往会遇到负面反应。如果有解析器,请使用它。”-来自regex标记
var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlstring);
var span = doc.DocumentNode.SelectSingleNode("//span[@class='sentence']");
var text = span.InnerText;
var html = span.InnerHtml;
<([^>]+)(?:\s+[^>]*)?>[^<>]*?(?:<([^>]+)(?:\s+[^>]*)?>)?(?<capture>[^<>]+)(?:<\/\2>)?[^<>]*?<\/\1>