如何从字符串中删除干扰词并使用正则表达式进行搜索?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)删除the
、of
等干扰词,然后查看searchString
中的所有单词是否都包含在要搜索的文本中?
我根本不知道 C# 中的 uisng RegEx,所以代码示例会有所帮助。谢谢,如果您觉得任何其他技术比正则表达式更好地为我服务,请提出任何其他技术。
试试这个(如果需要,添加更多类似时尚的单词):
string sPattern = "(?=.*'bbrown'b)(?=.*'bjumped'b)"
if (System.Text.RegularExpressions.Regex.IsMatch(mainString, sPattern))
{
// do something
}
(?=.*'bbrown'b)
= 使用积极的前瞻,它检查文本中是否存在单词brown
。 'b
是单词边界,因此它不会从另一个单词中挑选单词。例如,避免从单词land
中and
尝试使用 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.Join
将array
转换为string
。