如何使用 C# 和正则表达式删除引号 (") 内的所有逗号

Posted

技术标签:

【中文标题】如何使用 C# 和正则表达式删除引号 (") 内的所有逗号【英文标题】:How to remove all commas that are inside quotes (") with C# and regex 【发布时间】:2016-10-01 14:09:43 【问题描述】:

如何构建一个正则表达式以使用 C# 删除引号 (") 内的所有逗号,然后用 @ 替换它们?

示例

这样的初始字符串= (value 1,value 2,"value3,value4,value5",value 6)

预期的字符串像这样= (value 1,value 2,"value3@value4@value5", value 6)

【问题讨论】:

您的意思是改用string.Replace 吗? -msdn.microsoft.com/en-us/library/… 你也可以试试Regex.Replace(input, @"\B""\b[^""]+\b""\B", m => m.Value.Replace(",","@")) 【参考方案1】:

你可以使用

string input = "(value 1,value 2,\"value3,value4,value5\",value 6)";
var regex = new Regex("\\\"(.*?)\\\"");
var output = regex.Replace(input, m => m.Value.Replace(',','@'));

【讨论】:

你写得比我快,"\".*?\"" 对这个模式来说已经足够了 不适用于多级“报价区”,例如:"\"(value 1,value 2,\"value 3, value 4\",value 5,value 6)\"" @PaviełKraskoŭski OP 没有提到这样的事情;在您的示例中,我只看到两个引用的区域有点奇怪(不平衡的括号),但仅此而已 @Sehnsucht 好的,所以你的模式最适合这项任务。 @PaviełKraskoŭski 也许你是对的;由 OP 决定【参考方案2】:
string input = "= (value 1,value 2,\"value3,value4,value5\",value 6)";
string pattern = "(?<=\".*),(?=.*\")";
string result = Regex.Replace(input, pattern, "@");

【讨论】:

如果输入中有多个“引用区域”将不起作用,例如"= (value 1,value 2,\"value3,value4,value5\",value 6,\"value7,value8\")"【参考方案3】:

下面提到的正则表达式模式即使在多个级别也可以识别双引号内的数据 Regex pattern: ([\"].*[\"])

        List<string> input = new List<string>();
        input.Add("= (value 1,value 2,\"value3,value4,value5\",value 6)");
        input.Add("\"(value 1,value 2,\"value 3, value 4\",value 5,value 6)\"");
        var regex = new Regex("([\"].*[\"])");

        List<string> output = input.Select(data => regex.Replace(data, m=> m.Value.Replace(',','@'))).ToList();

        foreach(string dat in output)
            Console.WriteLine(dat);

【讨论】:

以上是关于如何使用 C# 和正则表达式删除引号 (") 内的所有逗号的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式在 C# 中使用转义引号查找带引号的字符串

C# 正则表达式拆分引号和逗号语法错误 [重复]

Bigquery 正则表达式 - 删除双引号中的逗号

如何使用java正则去掉这个字符串的引号

在正则表达式中使用引号,在 C# 中使用引号

C# 使用正则表达式过滤多行双引号字符串