2013-05-02 3 views
32

Я строю строку из фамилий, разделенных дефисом. Иногда туда попадает пробел. Мне нужно удалить все пробелы из конечного результата.Удалить все пробелы из строки C# с регулярным выражением

Пример строки для работы на:

Андерсон -Рида-Смит

Он должен закончить как (без пробела после Андерсона):

Anderson-Рида- Smith

Последняя фамильная строка в виде строки возможно, LastName.

Я использую регулярное выражение:

Regex.Replace(LastName, @"[\s+]", ""); 

Результатом этого является:

Андерсон -Рида-Смит.

Я также попытался:

Regex.Replace(LastName, @"\s+", ""); 

и

Regex.Replace(LastName, @"\s", ""); 

Что я делаю неправильно?

+0

Вам не нужно регулярное выражение, если имя является только данные в строке. В противном случае вы, вероятно, можете использовать (- | - | -) – Evo510

ответ

114

Вместо RegEx использования Replace для чего-то, что просто:

LastName = LastName.Replace(" ", String.Empty); 
+3

Это. Я бы проголосовал за этот ответ прямо сейчас, но на сегодняшний день я достиг своего предела для голосования. – Renan

+1

Не знал, что был предел! –

+4

@Renan, вернемся завтра и upvote :) – Gabe

11

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

var newstr = String.Join("",str.Where(c=>!char.IsWhiteSpace(c))); 

пробельных символов:0009 , 000a , 000b , 000c , 000d , 0020 , 0085 , 00a0 , 1680 , 180e , 2000 , 2001 , 2002 , 2003 , 2004 , 2005 , 2006 , 2007 , 2008 , 2009 , 200a , 2028 , 2029 , 202f , 205f , 3000.

+4

Имейте проблему. Хотите решить это с помощью регулярного выражения. Теперь у меня две проблемы. Решите его с помощью LINQ. Еще две проблемы :-) –

+1

@ JuliánUrbano Да Regex может быть проблематичным при сохранении, но я не могу сказать то же самое для Linq. – I4V

+1

@ JuliánUrbano, вы никогда не должны * хотеть * решать что-либо, потому что это особый API. На этот сайт ответили слишком много вопросов с ответом LINQ, хотя, по сути, его можно решить гораздо легче и гораздо быстрее. Выберите лучшее решение. –

44

Regex.Replace не изменяет свой первый аргумент (напомним, что строки являются неизменяемыми в .NET), поэтому вызов

Regex.Replace(LastName, @"\s+", ""); 

листья строка LastName не изменилась. Вы должны называть это следующим образом:

LastName = Regex.Replace(LastName, @"\s+", ""); 

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

-1

Ниже приведен код, который заменит пробел от имени файла на указанный URL-адрес, а также мы можем удалить его с помощью строки.пусто вместо "~"

if (!string.IsNullOrEmpty(url)) 
      { 
      string origFileName = Path.GetFileName(url); 
      string modiFileName = origFileName.Trim().Replace(" ", "~"); 
      url = url.Replace(origFileName , modiFileName); 
      } 
      return url; 
+0

Op said _ "Мне нужно удалить все ** пробелы **" _ и использовать '\ s'. Но этот дескриптор только '' '' пространства и в основном не связан. Хотя 'Trim()' обрабатывает только ведущее и занимательное пространство. Я не считаю нужным. –

-1

Зачем использовать Regex, когда вы можете просто использовать метод уравновешивания()

Text='<%# Eval("FieldDescription").ToString().Trim() %>' 

ИЛИ

string test = "Testing "; 
test.Trim(); 
+2

Он требует удаления всех пробелов, а не только ведущих и конечных пространств –

0

быстрый и общий способ сделать это (линия терминаторы, вкладки также будут обрабатываться). Regex мощные средства действительно не нужны для решения этой проблемы, но Regex может снизить производительность.

     new string 
          (stringToRemoveWhiteSpaces 
           .Where 
           (
            c => !char.IsWhiteSpace(c) 
           ) 
           .ToArray<char>() 
          ) 

ИЛИ

     new string 
          (stringToReplaceWhiteSpacesWithSpace 
           .Select 
           (
            c => char.IsWhiteSpace(c) ? ' ' : c 
           ) 
           .ToArray<char>() 
          ) 
Смежные вопросы