sql分组中的Regex替换

本文关键字:Regex 替换 sql | 更新日期: 2023-09-27 18:27:50

我想在sql分组条件中用字段的广播版本替换字段:

例如:

input: sum(count(andrei) + count(2) + sum(count3)
ouptput: sum(count(cast(andrei as int)) + count(cast(2 as int)) + sum(cast(count3 as int))

我的想法是用以下模式查找不包含"("或")"的文字:

  Match m = Regex.Match(input, "''([^''('')]+'')");

然后用广播版本替换它们。

我不知道如何进行更换。

sql分组中的Regex替换

您可以使用以下模式和替换字符串。

图案:(?<='()([^()]+)(?='))

  • (?<='():查找匹配(但不使用)左括号的后面
  • ([^()]+):带负字符类的编号捕获组,用于匹配除左括号和右括号之外的任何内容。当它们出现在角色类中时,没有必要逃离它们
  • (?=')):检测右括号的前瞻

替换字符串:cast($1 as int),其中$1表示第一个编号的捕获组

string input = "sum(count(andrei)) + count(2) + sum(count3)";
string pattern = @"(?<='()([^()]+)(?='))";
string replacement = "cast($1 as int)";
string result = Regex.Replace(input, pattern, replacement);
Console.WriteLine(result);