RegEx:找出我的比赛是否在<span>中

Kyl*_*bel 1 c# regex

遇到这个问题.

尝试为自定义文件执行一些基本语法突出显示.需要知道元素是否在标记内.

一些样本数据

<span class="class1"> 
    Some Text <span class="class2">Some More Text</span>
    TEST
    <span>Text</span>
</span>
TEST
Run Code Online (Sandbox Code Playgroud)

我想在这里做的是找到没有嵌套在span标签中的TEST的出现.

第一个class1标签不应该匹配,因为它嵌套在里面,第二个标签应该匹配,因为它没有嵌套在任何span标签中.

第一个测试应该显示它嵌套在span标签中,第二个测试应该显示它不是.

我知道正则表达式并不是用来解析html,但对于我的小情况,我认为使用正则表达式是最简单的,因为我不知道另一种方法来做我正在寻找的东西.我不反对使用XPath,如果它可以快速解决这个问题.

在我的代码中,我想要的是一个像这样的方法

bool InsideSpanTag(string source, int index);
Run Code Online (Sandbox Code Playgroud)

如果索引位于字符串源中的某些span标记之间,则返回true;如果不是,则返回false.

编辑:没关系,我只计算索引左侧的开始和结束跨度标签,看看开口跨度标签的数量是否大于结束标签.有点快,又脏,但这真的是我所需要的.

Ani*_*dha 5

正则表达式不是解析HTML文件的好选择.

HTML格式不严格,格式也不规则.(除外xhtml)

使用htmlagilitypack

这是你的代码

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(yourHtmlString);

bool valid= doc.DocumentNode
               .SelectNodes("//text()[not(parent::span)]")//this xpath selects all nodes whose parent is not span
               .Any(p => p.InnerText.Contains("TEXT"));
Run Code Online (Sandbox Code Playgroud)