如何从字符串中删除干扰词并使用正则表达式进行搜索?C#.

本文关键字:正则表达式 搜索 字符串 删除 干扰 | 更新日期: 2023-09-27 17:56:13

我正在尝试搜索字符串中的字符串。

字符串搜索:The quick brown fox jumped over the fence
搜索词: brown jumped

因此,当我执行StringToSearch.ContainsEx(searchTerm)时,它返回 true。所以我现在的工作方式是,我首先使用string.Remove()删除 nosie 单词,然后执行string.Split(' ')以获取单词,然后对要搜索的文本中此数组中的所有单词执行包含搜索。

它可以工作,但我希望它尽可能高性能,所以我可以使用正则表达式来执行相同的搜索吗? 即 1)删除theof等干扰词,然后查看searchString中的所有单词是否都包含在要搜索的文本中?

我根本不知道 C# 中的 uisng RegEx,所以代码示例会有所帮助。谢谢,如果您觉得任何其他技术比正则表达式更好地为我服务,请提出任何其他技术。

如何从字符串中删除干扰词并使用正则表达式进行搜索?C#.

试试这个(如果需要,添加更多类似时尚的单词):

string sPattern = "(?=.*'bbrown'b)(?=.*'bjumped'b)"
if (System.Text.RegularExpressions.Regex.IsMatch(mainString, sPattern))
{
    // do something
}

(?=.*'bbrown'b) = 使用积极的前瞻,它检查文本中是否存在单词brown'b是单词边界,因此它不会从另一个单词中挑选单词。例如,避免从单词landand

尝试使用 Linq ,我认为如果两个字符串都很长会很好。使用正则表达式,您首先必须动态构建一个正则表达式(对于 searchTerm 的每个元素),最终会得到一个很长的正则表达式,这可能会很慢。

List<string> StringToSearchList = new List<string>(StringToSearch.Split(' '));
List<string> searchTermList = new List<string>(searchTerm.Split(' '));
var query = StringToSearchList.Select(c => c).Except(searchTermList);

您可以使用string.Joinarray转换为string