正则表达式 - C# 替换 SQL 通配符

Posted

技术标签:

【中文标题】正则表达式 - C# 替换 SQL 通配符【英文标题】:Regex - C# Replace SQL wild card characters 【发布时间】: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 完成此替换?

【问题讨论】:

我添加了一个可能会有所帮助的答案,但是您可以在问题中添加您尝试过的内容吗?我想我读过这个问题,看到所有的括号和星号,我认为那里有一个模式:-) 【参考方案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%

【讨论】:

以上是关于正则表达式 - C# 替换 SQL 通配符的主要内容,如果未能解决你的问题,请参考以下文章

C#正则表达式指定替换

shell正则表达式

没有正则表达式的简单搜索和替换

正则表达式

C# 正则表达式 Replace的功能

使用Microsoft Word 2016中的正则表达式调整时间码