2015-03-20 5 views
0

мне нужна C# функции, которая заменит все специальные символы настроенных клиента из строки ПримерRegex заменить специальные символы, задаваемого клиентом

string value1 = @"‹¥ó׬¶ÝÆ"; 
string input1 = @"Thi¥s is\123a strÆing"; 
string output1 = Regex.Replace(input1, value1, ""); 

Я хочу, чтобы иметь результат, как эти: output1 =Thi s is\123a str ing

+2

Что вы подразумеваете под "особым характером"? Все символы, отличные от ASCII? – cubrr

ответ

0

Кто-то спросил о регулярном выражении?

string value1 = @"^\-[]‹¥ó׬¶ÝÆ"; 
string input1 = @"T-^\hi¥s is\123a strÆing"; 

// Handles ]^-\ by escaping them 
string value1b = Regex.Replace(value1, @"([\]\^\-\\])", @"\$1"); 

// Creates a [...] regex and uses it 
string input1b = Regex.Replace(input1, "[" + value1b + "]", " "); 

Основная идея заключается в том, чтобы использовать [...] регулярное выражение. Но сначала вам нужно избежать некоторых символов, которые имеют особое значение внутри [...]. Они должны быть ]^-\ Обратите внимание, что вам не нужно, чтобы избежать [

к сведению, что это решение не совместимо с символами, не BMP Юникода (символов, которые заполняют вверх два char) решение, которое совместимо с ними сложнее, но для нормального использования это не должно быть проблемой.

+0

Почему бы просто не использовать 'Regex.Escape'? – juharr

+0

@juharr Не избегать некоторых символов, таких как '' '' '' '' '' '' '' '' '' '' '' '. Он должен использоваться для текста «снаружи» '[]' – xanatos

+0

спасибо, очень подходит г-н xanatos, это предложение поможет мне :) – Aimar

4

Почему вам нужно регулярное выражение? Это более эффективно, кратким и читабельным:

string result = string.Concat(input1.Except(value1)); 

Если вы не хотите, чтобы удалить, но заменить их с другим string вы все еще можете использовать аналогичный (но не так эффективно) подход:

string replacement = "[foo]"; 
var newChars = input1.SelectMany(c => value1.Contains(c) ? replacement : c.ToString()); 
string result = string.Concat(newChars); // Thi[foo]s is\123a str[foo]ing 
+0

@fubo: но он также использует '' '' в качестве замены. –

+0

Для замены это просто потребует 'Join' и' Split' вместо 'Concat' и' Except' like 'string.Join (replace, input1.Split (value1.ToArray(), StringSplitOptions.None))' – juharr

+0

@fubo : point taken, я предоставил аналогичный подход, который не так эффективен, но позволяет заменить все символы любой нужной строкой. –

Смежные вопросы