正则表达式 - 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 通配符的主要内容,如果未能解决你的问题,请参考以下文章