gpt4 book ai didi

c# - 通过正则表达式模式匹配使用 stringbuilder 替换多次出现的字符串

转载 作者:行者123 更新时间:2023-11-30 18:11:45 26 4
gpt4 key购买 nike

我们正在尝试用它们各自的“组”替换字符串生成器中的所有匹配模式(正则表达式)。

首先,我们试图找到该模式所有出现的次数并循环遍历它们(次数 - 终止条件)。对于每个匹配项,我们都分配匹配对象并使用它们各自的组替换它们。

此处仅替换第一个匹配项,而不会替换其他匹配项。

      *str* - contains the actual string

Regex - ('.*')\s*=\s*(.*)

匹配模式:

    'nam_cd'=isnull(rtrim(x.nam_cd),''), 
'Company'=isnull(rtrim(a.co_name),'')

图案:使用 https://regex101.com/ 创建

*matches.Count* - gives the correct count (here 2)


String pattern = @"('.*')\s*=\s*(.*)";
MatchCollection matches = Regex.Matches(str, pattern);
StringBuilder sb = new StringBuilder(str);
Match match = Regex.Match(str, pattern);

for (int i = 0; i < matches.Count; i++)
{
String First = String.Empty;
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value);

First = match.Groups[2].Value.TrimEnd('\r');
First = First.Trim();
First = First.TrimEnd(',');

Console.WriteLine(First);

sb.Replace(match.Groups[0].Value, First + " as " + match.Groups[1].Value) + " ,", match.Index, match.Groups[0].Value.Length);
match = match.NextMatch();
}

当前输出:

SELECT DISTINCT
isnull(rtrim(f.fleet),'') as 'Fleet' ,
'cust_clnt_id' = isnull(rtrim(x.cust_clnt_id),'')

预期输出:

SELECT DISTINCT
isnull(rtrim(f.fleet),'') as 'Fleet' ,
isnull(rtrim(x.cust_clnt_id),'') as 'cust_clnt_id'

最佳答案

像这样的正则表达式解决方案太脆弱了。如果需要解析任意 SQL,则需要专用的解析器。 Parsing SQL code in C# 中有关于如何正确解析 SQL 的示例.

如果你确定没有“野生”,不平衡()在您的输入中,您可以使用正则表达式作为解决方法,以完成一次性工作:

var result = Regex.Replace(s, @"('[^']+')\s*=\s*(\w+\((?>[^()]+|(?<o>\()|(?<-o>\)))*\))", "\n $2 as $1");

参见 regex demo .

详情

  • ('[^']+') - 捕获组 1($1):' , 1 个或多个除 ' 以外的字符然后 '
  • \s*=\s* - =用 0+ 个空格括起来
  • (\w+\((?>[^()]+|(?<o>\()|(?<-o>\)))*\)) - 捕获第 2 组($2):
    • \w+ - 1+ 个单词字符
    • \((?>[^()]+|(?<o>\()|(?<-o>\)))*\) - 一个 (...)具有任意数量平衡的子串 (...) s 在里面(见 my explanation of this pattern )。

关于c# - 通过正则表达式模式匹配使用 stringbuilder 替换多次出现的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56847016/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com