2014-02-14 7 views
3

Это, кажется, общий вопрос для пользователей C#, и после исследования и нескольких попыток, которые я не могу использовать для жизни, я удаляю пару скобок из строки. У строки, с которой я столкнулся, есть Service (additional).C# удалить скобки из строки

После выполнения моих исследований я понимаю, что круглые скобки обрабатываются по-разному в Regex.Replace. В моем исследовании также появилось несколько ответов, которые я попытался, но, похоже, ничего не сработало. Вот несколько способов, с помощью которых я попытался удалить эти скобки.

cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 

Ни один из них не работал, после пошагового кода я просто увидеть пространство между «е» и «(» удалена. Могу ли я что-то отсутствует?

В случае, если кто хотел бы видеть function, который используется здесь:

public static string CleanExtra(string intVal) 
    { 
     string cleanValue; 
     if (intVal == null) 
     { 
      throw new System.ArgumentException("Value cannot be null", "original"); 
     } 
     else 
     { 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace("(", "").Replace(")", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace(@"\(", "").Replace(@"\)", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      //cleanValue = Regex.Replace(intVal, " ", "").Replace("[()]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
      cleanValue = Regex.Replace(intVal, " ", "").Replace(@"[^a-zA-Z]", "").Replace(",", "").Replace("/", "").Replace("-", ""); 
     } 

     return cleanValue; 
    } 
+2

Зачем использовать Regex для этого? Не можете ли вы использовать string.Replace()? – Crono

+0

Это был только первый способ удалить что-то, что я споткнулся. Я попробую заменить строку на данный момент, но независимо от того, это также должно быть опцией. – user2405778

+2

Regex предназначены для поиска шаблонов, таких как десятичные символы, буквы с верхним регистром, что-то похожее на адрес электронной почты или номер телефона и т. Д. Если вам точно известно, какой символ или строку вы хотите заменить, string.Replace - это гораздо лучший выбор, с точки зрения производительности. – Crono

ответ

5

После вашего звонка на Regex.Replace(...) вы фактически используете string.Replace(...). Это делает ваш звонок .Replace(@"[^a-zA-Z]", "") бесполезным.

Упростить это вместо того, чтобы:

cleanValue = Regex.Replace(intVal, @"[^a-zA-Z]", ""); 

Это должно устранить все пробелы и специальные символы, которые, как он выглядит, как ваш код пытается сделать. Это включает круглые скобки.

+0

Спасибо, это имеет большой смысл. – user2405778

14

Regex является излишеством здесь, как это можно сделать с помощью простого Replace вызова:

string val = intVal.Replace("(", "").Replace(")", ""); 
+0

У меня вопрос, если вы не возражаете. Из комментариев в этом вопросе люди говорили, что после моего первоначального 'Regex.Replace (...)', '.Replace', который следует за ним, равен' string.replace'. Если это так (если это я не ошибаюсь), почему бы это не сделать в первую очередь: cleanValue = Regex.Replace (intVal, "", "") .Replace ("(", "") .Replace (")", ""). Замените (",", ""). Замените ("/", "") .Replace ("-", ""); – user2405778

+1

@ user2405778, что конкретный образец должен работать нормально – JaredPar

+0

Хорошо, что странно, что это не так, возможно, это была другая ошибка, с которой я столкнулся. Спасибо, что объяснил это мне. – user2405778

3

Это потому, что каждая секунда Replace является вызовом на string и поэтому не заменяет его регулярным выражением.

+0

Итак, вы говорите, что если первая замена удаляет скобки, они просто возвращаются, когда я делаю вторую замену в регулярном выражении? – user2405778

+2

'Regex.Replace' возвращает строку. При вызове 'Replace' не существует никакого регулярного выражения, как в вашем первом вызове (именно поэтому вы назвали' Regex.Replace' в первую очередь) –

+0

О, ладно, спасибо за это. – user2405778

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