字符串函数 - 如果字符在两个其他字符之间,则替换它们的实例

时间:2015-04-22 13:49:11

标签: c# regex string replace

我运行了一个大规模的SQL查询,我不想再次运行并将结果保存为csv。我正在C#控制台应用程序中进行一些处理,将每个记录添加到存储表。不幸的是,我搞砸了并没有删除结果中的',并且在这些数据中有一些用JSON序列化的对象包含','。

我已经循环浏览了所有这些数据,因此我的列正确排列,我只想暂时转换','说&#39 ;;',但仅限于字符串中的花括号之间。例如:

ID,InputModel,Type
1,{"address":"11th street"},true
2,{"address":"11th street, new york"},true

我的代码如下:

for (int j = 0; j < allLines.Length; j++)
{                    
    string line = allLines[j];
    // would like to replace ',' with ';' if between curly braces
    string[] data = line.Split(',');
    myInsertMethod(data);
}

期望的结果:

ID,InputModel,Type
1,{"address":"11th street"},true
2,{"address":"11th street; new york"},true

1 个答案:

答案 0 :(得分:4)

您可以使用以下正则表达式匹配花括号内的逗号:

(?<=\{[^}]*),(?=[^}]*\})

您可以用分号替换它:

var rgx = new Regex(@"(?<=\{[^}]*),(?=[^}]*\})");
var result = rgx.Replace("{word, word}, {word, word}", ";");

结果:{word; word}, {word; word}

您的代码:

private static readonly Regex rgx = new Regex(@"(?<=\{[^}]*),(?=[^}]*\})", RegexOptions.Compiled);
...
for (int j = 0; j < allLines.Length; j++)
{                    
    var line = allLines[j];
    var data = rgx.Replace(line, ";").Split(',');
    myInsertMethod(data);
}

在Expresso中测试:

enter image description here