c# Regex -执行通配符搜索,需要用linq转义某些字符

本文关键字:linq 转义 字符 Regex 执行 通配符 搜索 | 更新日期: 2023-09-27 18:16:49

我使用EF,我已经实现了一个支持通配符搜索的搜索函数。例如,如果给定的搜索输入是%CU%P%,我会将其格式化为^.*?CU.*P.*?$并使用regex.isMatch选择它。比如SQL LIKE '%CU%P%'。例子:

string regexSearch = GeneralHelper.RegexWildCardSearchPattern(requestDto.Name); ( it will format the % become ^.*?CU.*P.*?$)
Regex regex = new Regex(regexSearch, RegexOptions.IgnoreCase);
allCompetitionList = allCompetitionList.Where(x => regex.IsMatch(x.CompetitionName)).ToList();

但是当用户给我%????%之类的东西时,我会碰到嵌套量词问题。如果用户给我一些像%???%,我将返回什么,但在我的DB我有一个像????的记录。我已经尝试过,如果我手动输入成为%'''?'''?'''?%,它将返回我????记录。

我想我需要通过在除%外的任何我想转义的字符后面加上''来转义字符。

c# Regex -执行通配符搜索,需要用linq转义某些字符

正则表达式中具有特殊含义的字符可以在其前面加上反斜杠进行转义。. net正则表达式类包括Regex.Escape(...)方法,用于转义字符串中的字符。

在调用GeneralHelper...方法之前,可能应该在输入字符串上使用Regex.Escape(...)。如果GeneralHelper...方法只做问题中显示的内容(即添加^$,并用..*替换%),那么下面的代码可能就足够了。

string regexSearch = GeneralHelper.RegexWildCardSearchPattern(
    Regex.Escape(requestDto.Name));