问题描述
我有一些可以与EF Core的EF.Function.Like
配合使用的输入。
所以我可能会收到类似%some_text%
这样的输入,其中通配符为%
和_
我需要考虑这一点,并将其提供给另一种不是sql的过滤机制,其中只有*
通配符。
因此上述内容将变成*some*text*
。
但是,sql可以像这样转义其通配符。 %some[_]te_t[%]
,应转换为*some_te*t%
如何使用C#替换正则表达式?
解决方法
您可以使用2个捕获组并检查例如2组是否具有值。如果不是,则返回第1组的值,该值将捕获方括号之间的值。
由于括号本身是匹配的,因此它们不是替换的一部分。
\[([%_])\]|([%_])
示例代码
string[] strings = {
"%some_text%","%some[_]te_t[%]"
};
foreach (String s in strings) {
var result = Regex.Replace(
s,@"\[([%_])\]|([%_])",match =>
match.Groups[2].Success ? "*" : match.Groups[1].Value
);
Console.WriteLine(result);
}
输出
*some*text*
*some_te*t%