2014-12-15 4 views
0

У меня есть строковыйхочет регулярного выражения для \ п и \ т

string source = "hemant \\\n test new line \\\t test tab"; 

хочет строки, используя регулярное выражение

string destination = "hemant test new line test tab" 

(Здесь я просто заменить \ п и \ т с «» т.е. белое пространство)

Так я был попробовать

string destination = Regex.Replace(source, "[\\\n\\\\t]", " "); 

это дает мне назначение = тест на хема ew line es ab "

Здесь он удаляет \\ n и \\ t. Но удалить нть из Hemant п от нового

string destination = Regex.Replace(source, "[\\n\\t]", " "); 

это ничего

+0

В вашей строке содержится обратная косая черта, сопровождаемая символом новой строки или вкладкой, или просто обратная косая черта, сопровождаемая буквами n или t? Ответ, который вы приняли, не будет работать для вашей строки. Если это «string source =» hemant \\ n test new line \\ t test tab »;' – juharr

ответ

2

попробовать это:

string destination = Regex.Replace(source, @"(?:\\n)|(?:\\t)", " "); 

или еще проще:

string destination = Regex.Replace(source, @"\\[nt]", " "); 
+0

Это приводит к 3 пробелам между «hemat» и «test», предполагая, что исходная строка должна быть «string source =» hemant \\ n проверить новую строку \\ t test tab ";'. Это приводит к чему-то совершенно другому для фактической строки, отправленной OP. – juharr

+1

@ "\ s \\\ [nt] \ s" также заменит предыдущее и следующее пробелы в этом случае.Я просто взял частичный ответ, который он предоставил, и заставил его работать. –

-1

Вы можете просто использовать string.Replace для этого не делать.

destination = source.Replace("\\\n", "").Replace("\\\t", ""); 

Но обратите внимание, что оставит два пробела между «Хематом» и «тестом», а также между «линией» и «тестом». Если вы хотите сжать пробелы, вы также можете использовать это регулярное выражение.

var destination = Regex.Replace(source, @"\s*(\\\n|\\\t)\s*", " "); 

Обратите внимание на использование @ так что вам не придется потесниться на обратной косой черты.

Или предполагая вашу строку на самом деле

source = "hemant \\n test new line \\t test tab"; 

Это символ обратной косой черты следует буква «п» и обратной косой черты, за которым следует буква «т». Тогда вы могли бы сделать что-то подобное.

var destination = Regex.Replace(source, @"\s*\\[nt]\s*", " "); 
0

"[\\\n\\\\t]" является класс, который описывает \n и t как отдельные символы, так что вы потеряете все n & t символов.

Использование: "\\\\\\n|\\\\\\t"

-1

Просто используйте source.Replace("\\", " ").Replace("\n", " ").Replace("\t", " "); здесь нет необходимости в регулярном выражении.

+0

Это фактически удалит любой экземпляр обратной косой черты, новой строки или табуляции, а не только обратную косую черту, за которой следует новая строка или вкладка. Но, по-видимому, ОП пытался заменить обратную косую черту, а затем «n» или «t». Но в целом я согласен, что, когда это возможно, следует избегать использования регулярных выражений. – juharr

+0

@juharr Ну, мое решение делает то, что хочет OP, удалите \\ n и \\ t, хотя он также заменит \\. Однако я не думаю, что это ошибка, просто сравните источник и пункт назначения, мой код выполнит это. – HimBromBeere

+0

Моя тоже. Если вы применяете принятый ответ к опубликованному коду, вы не получаете желаемого результата, поэтому я могу только предположить, что OP неправильно отправил исходную строку. – juharr

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