gpt4 book ai didi

c# - 什么正则表达式将匹配不包括 HTML 标签内内容的文本?

转载 作者:太空狗 更新时间:2023-10-29 22:18:19 25 4
gpt4 key购买 nike

我正在为需要突出显示搜索词的搜索结果页面编写代码。这些术语恰好出现在表格单元格中(应用程序正在遍历 GridView 行单元格),并且这些表格单元格可能具有 HTML。

目前,我的代码如下所示(相关代码如下所示):

const string highlightPattern = @"<span class=""Highlight"">$0</span>";
DataBoundLiteralControl litCustomerComments = (DataBoundLiteralControl)e.Row.Cells[CUSTOMERCOMMENTS_COLUMN].Controls[0];

// Turn "term1 term2" into "(term1|term2)"
string spaceDelimited = txtTextFilter.Text.Trim();
string pipeDelimited = string.Join("|", spaceDelimited.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries));
string searchPattern = "(" + pipeDelimited + ")";

// Highlight search terms in Customer - Comments column
e.Row.Cells[CUSTOMERCOMMENTS_COLUMN].Text = Regex.Replace(litCustomerComments.Text, searchPattern, highlightPattern, RegexOptions.IgnoreCase);

它的效果令人惊讶。但是,有时我匹配的文本是如下所示的 HTML:

<span class="CustomerName">Fred</span> was a classy individual.

如果您搜索“class”,我希望突出显示代码将“class”包装在“classy”中,但当然不是碰巧在那里的 HTML 属性“class”!如果您搜索“Fred”,则应突出显示。

那么什么是好的正则表达式可以确保匹配只发生在 html 标签之外?它不一定是 super 硬核。我认为,只需确保匹配不在 < 和 > 之间即可。

最佳答案

这个正则表达式应该可以完成工作:(?<!<[^>]*)(regex you want to check: Fred|span)它检查不可能匹配正则表达式 <[^>]*从匹配的字符串开始倒退。

修改后的代码:

const string notInsideBracketsRegex = @"(?<!<[^>]*)";
const string highlightPattern = @"<span class=""Highlight"">$0</span>";
DataBoundLiteralControl litCustomerComments = (DataBoundLiteralControl)e.Row.Cells[CUSTOMERCOMMENTS_COLUMN].Controls[0];

// Turn "term1 term2" into "(term1|term2)"
string spaceDelimited = txtTextFilter.Text.Trim();
string pipeDelimited = string.Join("|", spaceDelimited.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries));
string searchPattern = "(" + pipeDelimited + ")";
searchPattern = notInsideBracketsRegex + searchPattern;

// Highlight search terms in Customer - Comments column
e.Row.Cells[CUSTOMERCOMMENTS_COLUMN].Text = Regex.Replace(litCustomerComments.Text, searchPattern, highlightPattern, RegexOptions.IgnoreCase);

关于c# - 什么正则表达式将匹配不包括 HTML 标签内内容的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/179779/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com