Skip to main content
 首页 » 编程设计

c#之正则表达式:找出我的匹配项是否在 span> 中

2024年02月01日27jackei

这个有点麻烦。

尝试为自定义文件做一些基本的语法高亮显示。需要知道元素是否在标签内。

一些样本数据

<span class="class1">  
    Some Text <span class="class2">Some More Text</span> 
    TEST 
    <span>Text</span> 
</span> 
TEST 

我想在这里做的是找到未嵌套在 span 标记中的 TEST 的出现。

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

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

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

在我的代码中,我只想要这样的方法

bool InsideSpanTag(string source, int index); 

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

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

请您参考如下方法:

正则表达式不是解析 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"));