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

此时我无法控制生成此文件的源系统。

我有一个使用双引号作为文本限定符的 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 中的内容

((?<=,").*(?=",))


森栏
浏览 222回答 3
3回答

12345678_0001

它帮助我看到我需要采取分阶段的方法。首先,我得到 ," 和 ",. 然后我找到了在它们出现的模式中有单双引号的模式,并用 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){&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp; var value = matchingString.Value;&nbsp; &nbsp; if (regxReplace.IsMatch(value))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; changed = true;&nbsp; &nbsp; &nbsp; &nbsp; var newReplacementString = regxReplace.Replace(value, "\"\" ");&nbsp; &nbsp; &nbsp; &nbsp; newLine = newLine.Replace(matchingString.Value, newReplacementString);&nbsp; &nbsp; }}return newLine;
打开App,查看更多内容
随时随地看视频慕课网APP