Как "обрезать" многострочную строку?

Я пытаюсь использовать Trim() на многострочной строке, однако только первая строка будет Trim(). Кажется, я не могу понять, как удалить все пробелы из начала каждой строки.

string temp1 = "   test   ";
string temp2 = @"   test
                    line 2 ";

MessageBox.Show(temp1.Trim());
//shows "test".

MessageBox.Show(temp2.Trim());
//shows "test"
        "       line2 ".

могу ли я использовать Trim/TrimStart/TrimEnd на несколько строк?

6 ответов


могу ли я использовать Trim/TrimStart/TrimEnd на многострочной строке?

да, но он только обрезает строку в целом, и не обращает внимания на каждую строку в содержимом строки.

Если вам нужно обрезать каждую строку, вы можете сделать что-то вроде:

string trimmedByLine = string.Join(
                             "\n", 
                             temp2.Split('\n').Select(s => s.Trim()));

это обрезает каждую строку

temp2 = string.Join(Environment.NewLine, 
    temp2.Split(new []{Environment.NewLine},StringSplitOptions.None)
         .Select(l => l.Trim()));

string temp3 = String.Join(
                    Environment.NewLine, 
                    temp2.Split(new char[] { '\n', '\r' },StringSplitOptions.RemoveEmptyEntries)
                         .Select(s => s.Trim()));

разделить, обрезать, присоединиться

string[] lines = temp1.Split(new []{Environment.NewLine});
lines = lines.Select(l=>l.Trim()).ToArray();
string temp2 = string.Join(Environment.NewLine,lines);

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

вот PHP (я на Mac, поэтому нет C#) пример preg_replace, который делает это

<?php

$test = "   line 1     
     line 2 with blanks at end     
     line 3 with tabs at end        ";

print $test;

$regex = '/[ \t]*\n[ \t]*/';
$res = trim(preg_replace($regex, "\n", $test));
print $res;

регулярное выражение preg_replace удаляет пробелы вокруг линейных каналов, обрезка удаляет их в начале и конце.

Регулярное Выражение C#.Заменить метод должен работать, как прежде.


не по теме, но в PowerShell часы, когда вы используете этот код:

$content = Get-Content file.txt;
$trimmed = $content.Trim();

так, не очевидно, $content это массив линий, поэтому PS будет волшебным образом выполнять Trim для каждой строки.

заставляя его в строку:

[System.String]$content = Get-Content file.txt;

не будет работать, так как PowerShell затем удаляет все возвраты каретки, чтобы сделать одну строку..!