gpt4 book ai didi

c# - 使用正则表达式解析退化 CSV 文件中的逗号和引号

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:18 27 4
gpt4 key购买 nike

我需要解析字符串输入,其中列由列分隔,并且数据中包含逗号的任何字段都用引号引起来(逗号分隔,带引号的文本标识符)。对于这个项目,我需要删除引号和引号对之间出现的任何逗号。基本上,我需要删除字段中包含的逗号和引号,同时保留用于分隔字段的逗号。这是我放在一起处理简单场景的一些代码:

// Sample input 1: This works and covers 99% of the records that I need to parse.
string str1 = "an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,\"This Address Works, Suite 200\",Some City,TN,09876-5432,9795551212x123,XYZ";
str1 = Regex.Replace(str1, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str1);
// Outputs: an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,This Address Works Suite 200,Some City,TN,09876-5432,9795551212x123,XYZ

虽然此代码适用于我的大部分记录,但当一个字段包含多个逗号时它不起作用。我想做的是修改代码,以便它删除列中包含的每个逗号实例,无论该字段中有多少个逗号。我不想硬编码只处理 2 个逗号、3 个逗号或 25 个逗号。该代码应该只删除该字段中的所有逗号。以下是我的代码无法正确处理的示例。

// Sample input 2: This doesn't work since there is more than 1 comma between the quotes.
string str2 = "an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,\"i,l,k,e, c,o,m,m,a,s, i,n ,m,y, f,i,e,l,d\",Some City,TN,09876-5432,9795551212x123,XYZ";
str2 = Regex.Replace(str2, "\"([^\"^,]*),([^\"^,]*)\"", "$1$2");
Console.WriteLine(str2);
// Desired output: an_email_address@somewhere.com,2010/03/27 12:2:02,,some_first_name,some_last_name,,i like commas in my field,Some City,TN,09876-5432,9795551212x123,XYZ

如何使用正则表达式完成此操作?

最佳答案

匹配引号和正则表达式不能齐头并进,您最好使用 CSV 解析器,正如 Michael Madsen 所建议的那样。
但是,如果您知道引号只会按预期出现,您可以执行以下操作:

str2 = Regex.Replace(str2, "\"[^\"]*\"",
match => match.Value.Trim('\"').Replace(",", ""));

关于c# - 使用正则表达式解析退化 CSV 文件中的逗号和引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2530749/

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