-1

我想在 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, "\\([^\\(\\)]+\\)");

然后用铸造版本替换它们。

我不知道如何执行替换。

4

1 回答 1

1

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

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

  • (?<=\(): 匹配(但不消耗)左括号的后视
  • ([^()]+): 带有负字符类的编号捕获组,以匹配除左括号和右括号之外的任何内容。当它们出现在字符类中时,无需转义它们。
  • (?=\)): 检测右括号的前瞻

替换字符串:cast($1 as int)where$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);
于 2013-08-17T05:29:39.687 回答