正则表达式 - 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 组的值。

由于括号本身是匹配的,因此它们不是替换的一部分。

\[([%_])\]|([%_])

Regex demo | C# demo

示例代码

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%