如何使用 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# 和正则表达式删除引号 (") 内的所有逗号的主要内容,如果未能解决你的问题,请参考以下文章