为了账号安全,请及时绑定邮箱和手机立即绑定

正则表达式 - 修复 CSV - 带引号的文本限定符中的引号

正则表达式 - 修复 CSV - 带引号的文本限定符中的引号

C#
森栏 2021-06-24 18:02:32
此时我无法控制生成此文件的源系统。我有一个使用双引号作为文本限定符的 csv 文件。在合格的文本字段中,我有时会使用双引号来表示英寸等。例如:something not qualified,"12" x 12" something qualified, becuase it has a comma",this one is not qualified and needs no fixing a 12" x 12"这些应该用两套引号转义,如下所示:something not qualified,"12"" x 12"" something qualified, becuase it has a comma",this one is not qualified and needs no fixing a 12" x 12"我正在尝试使用 c# 和正则表达式编写一些清理代码。我可以编写代码来选择介于两者之间的所有内容,",",但我无法弄清楚如何在这些分隔符中获取双引号。我可以有没有限定符(没有逗号)的字段,可以有一个双引号并且不需要修复。这是我在 regexr https://regexr.com/3pq51 中的内容((?<=,").*(?=",))
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

它帮助我看到我需要采取分阶段的方法。


首先,我得到 ," 和 ",. 然后我找到了在它们出现的模式中有单双引号的模式,并用 2 个双引号和一个空格替换。以防万一,我每次都这样做。


string matchPattern = "((?<=,\").*?(?=\",))";

string input = "something not qualified,\"12\" x 12\" something qualified, becuase it has a comma\",this one is not qualified and needs no fixing a 12\" x 12\",\"8\" X 8\" sign, plain\",one more";

var newLine = input;


Regex regx = new Regex(matchPattern);

Regex regxReplace = new Regex(@"(?<=\w)""[^\w|\""]");

var matches = regx.Matches(input);


foreach (Match matchingString in matches)

{        


    var value = matchingString.Value;

    if (regxReplace.IsMatch(value))

    {

        changed = true;

        var newReplacementString = regxReplace.Replace(value, "\"\" ");

        newLine = newLine.Replace(matchingString.Value, newReplacementString);

    }

}


return newLine;


查看完整回答
反对 回复 2021-06-27
  • 3 回答
  • 0 关注
  • 221 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信