正则表达式 - C# 替换 SQL 通配符
Regex - C# Replace SQL wild card characters
我有一些与 EF Core 一起使用的输入 EF.Function.Like
。
所以我可能会收到这样的输入 %some_text%
,其中通配符是 %
和 _
我需要把它交给另一个不是 SQL 的过滤机制,那里只有 *
通配符。
所以上面会变成*some*text*
.
然而,SQL 可以像这样转义它的通配符。 %some[_]te_t[%]
,应转换为 *some_te*t%
如何使用 C# 使用 Regex 完成此替换?
您可以使用 2 个捕获组并检查例如组 2 是否有值。如果不是,return 捕获方括号之间的值的第 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%
我有一些与 EF Core 一起使用的输入 EF.Function.Like
。
所以我可能会收到这样的输入 %some_text%
,其中通配符是 %
和 _
我需要把它交给另一个不是 SQL 的过滤机制,那里只有 *
通配符。
所以上面会变成*some*text*
.
然而,SQL 可以像这样转义它的通配符。 %some[_]te_t[%]
,应转换为 *some_te*t%
如何使用 C# 使用 Regex 完成此替换?
您可以使用 2 个捕获组并检查例如组 2 是否有值。如果不是,return 捕获方括号之间的值的第 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%