【问题标题】:Regex - C# Replace SQL wild card characters正则表达式 - C# 替换 SQL 通配符
【发布时间】:2020-12-10 01:41:45
【问题描述】:

我有一些适用于 EF Core 的 EF.Function.Like 的输入。

所以我可能会收到这样的输入%some_text%,其中通配符是%_

我需要把它交给另一个不是 SQL 的过滤机制,那里只有 * 通配符。

所以上面会变成*some*text*

但是,SQL 可以像这样转义其通配符。 %some[_]te_t[%],应该转换为*some_te*t%

如何使用 C# 使用 Regex 完成此替换?

【问题讨论】:

  • 我添加了一个可能会有所帮助的答案,但是您可以在问题中添加您尝试过的内容吗?我想我读过这个问题,看到所有的括号和星号,我认为那里有一个模式:-)

标签: c# regex tsql replace wildcard


【解决方案1】:

您可以使用 2 个捕获组并检查例如第 2 组是否有值。如果不是,则返回组 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%

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2022-11-04
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多