2016-10-01 13 views
1

Как создать регулярное выражение для удаления всех запятых, находящихся внутри кавычек ("), используя C#, а затем заменить их на @?Как удалить все запятые, которые находятся внутри кавычек ("), с C# и регулярным выражением

Пример:

Исходная строка, как этот = (value 1,value 2,"value3,value4,value5",value 6)

Ожидаемые строки, как этот = (value 1,value 2,"[email protected]@value5", value 6)

+0

Вы имеете в виду использовать 'string.Replace' вместо этого? -https: //msdn.microsoft.com/en-us/library/system.string.replace (v = vs.110) .aspx –

+0

Вы также можете попробовать 'Regex.Replace (input, @" \ B "" \ b [^ ""] + \ b "" \ B ", m => m.Value.Replace (", "," @ "))' –

ответ

2

Вы можете использовать

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

Вы были быстрее, чем я, чтобы написать его, '" \ " . *? \ "" 'достаточно для шаблона, хотя – Sehnsucht

+1

Не будет работать для многоуровневых« зон цитат », например:' '\" (значение 1, значение 2, \ "значение 3, значение 4 \", значение 5, значение 6) \ "" ' –

+0

@ PaviełKraskoŭski OP не упомянул об этом; в вашем примере я просто вижу две котируемые зоны, которые немного странные (неуравновешенные parens), но не более – Sehnsucht

1
string input = "= (value 1,value 2,\"value3,value4,value5\",value 6)"; 
string pattern = "(?<=\".*),(?=.*\")"; 
string result = Regex.Replace(input, pattern, "@"); 
+0

Не будет работать, если на входе имеется несколько «котируемых зон» , например '' = (значение 1, значение 2, \ "значение3, значение4, значение5 \", значение 6, \ "value7, value8 \") "' – Sehnsucht

0

Regex узор называется ниже будет работать, чтобы идентифицировать данные в двойных кавычках, даже при многократном уровне 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);