我运行了一个大规模的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
答案 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中测试: