【问题标题】:Match and highlight keywords from list in a string匹配并突出显示字符串中列表中的关键字
【发布时间】:2014-05-23 03:58:32
【问题描述】:

我想扫描文本字符串以查找列表中包含的任何单词,并突出显示在字符串中找到的所有匹配项,而不管在 C# 中使用正则表达式是否出现。有人会指出我正确的方向吗?很抱歉听起来不是技术性的,但希望它是有道理的。

例如:

列表包含“匹配”、“匹配”、“列表”、“文本”

string text = "匹配文本列表中的所有匹配项并突出显示匹配项"

输出:“匹配 列表中的所有匹配 文本并突出显示匹配"

任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 当你说不管出现的时候,你的意思是如果这个词出现在另一个词的中间就可以了?例如,list 仍将匹配 blister?
  • 老实说,这太模糊了,这里没有人会回答这个问题。您需要考虑如何分解字符串并将其与列表进行比较。时间和坚持将赢得胜利。
  • 到目前为止你尝试过什么?任何代码示例,我们不是来为您编程的,我们是来提供帮助的。
  • 它需要匹配精确的单词并且没有子字符串/部分匹配。很抱歉造成混乱。

标签: c# asp.net regex


【解决方案1】:

如果你有一个搜索词数组:

var searches = new [] { "Match", "matches", "list", "text" };

和要搜索的字符串:

var text = "Match all matches from the list in text and highlight the matches";

您可以将单词与String.Join 组合成一个regular expression,搜索第一或第二或第三个等(等)(\b 表示单词边界,因此只有整个单词匹配):

var regex = @"\b(" + String.Join("|", searches) + @")\b";
// regex: \b(Match|matches|list|text)\b

然后,应用搜索并使用替换突出显示是一件简单的事情(在替换表达式中,$1 是对第一个匹配组的引用,例如,在原始短语中找到的单词):

var result = Regex.Replace(text, regex, @"**$1**");
// result: **Match** all **matches** from the **list** in **text** and highlight the **matches**

(Code Demo)

请注意,此解决方案适用于您提供的示例,但根据您的实际情况,有许多注意事项:

  • 如果您的搜索“单词”包含正则表达式可识别的特殊字符,您可能需要对其进行转义,例如,\.\(\) 等。
  • 上面提供的当前代码示例区分大小写,例如Match匹配match

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2022-11-18
    • 2022-07-07
    相关资源
    最近更新 更多