2013-08-07 2 views
2

У меня возникли проблемы с удалением лишних пробелов из следующего:Удалить лишние пробелы на строки со специальными символами

abc\ae.exe  a 1 b 2%% ACU > log.txt 

Я использую следующий код, чтобы удалить лишние пробелы (которые я нашел на SO):

Regex.Replace(cmdLine, @"^\s*$\n", string.Empty, RegexOptions.Multiline).TrimEnd(); 

Приведенный выше код удаляет лишние пробелы между abc \ ae.exe & штраф; однако он не удаляет лишнее пространство из 2 %% ACU (между двумя промежутками).

Я не очень хорошо знаком с выражениями reg, но полагаю, что это связано с тем, что знак% может быть ключевым словом reg ex.

Любое руководство будет принята с благодарностью.

+0

Почему бы не просто заменить 2 пространства на 1 пробел? Если он включает вкладку, замените '[\ t] *' на "". У задних клещей, похоже, проблема, когда просто делаете пробелы –

+0

Привет. Я тестирую линию, где вы не будете знать, сколько пробелов будет между разными словами. –

ответ

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

Заменит несколько пробелов одним пробелом

+ означает match the character one or more times

Вот Regex Guide For C#

+0

Привет, спасибо за ответ. У меня возникают проблемы со следующей строкой с этим выражением «abc \ abc.exe». Как вы можете видеть, если я кормлю эту строку, которая не имеет пробелов в этом выражении, она возвращает «abc bc.exe». Он удаляет '\ a' из строки. Благодаря! –

+0

В моих тестах он отлично работает с этим входом, не заменяя ничего, если нет пробелов. – Jonesopolis

+0

Это очень странно. Я не получаю следующий тест: «ingsda \ test_asdsdd.exe s 1 b 2 %% cldtg> log.txt». Он возвращает 'ingsda est_asdsafd.exe s 1 b 2 %% cldtg> log.txt' –

0

Вы также можете сделать это с Character Groups, если вы хотите, чтобы выбрать конкретное белое пространство символы, а не все, включенные в \s (Эквивалент [ \f\n\r\t\v])

string test = @"abc\ae.exe   a 1 b 2%% ACU > log.txt"; 
// Replace one more more space characters with a single space 
// Add other whitespace characters inside [ ] (ex: \t) 
string no_space2 = Regex.Replace(test,@"[ ]+"," "); 
Смежные вопросы