14

我正在尝试Trim()在多行字符串上使用,但是只有第一行会Trim()。我似乎无法弄清楚如何从每行的开头删除所有空格。

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

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

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

我可以在多行字符串上使用Trim//吗TrimStartTrimEnd

4

7 回答 7

18

我可以在多行字符串上使用 Trim/TrimStart/TrimEnd 吗?

是的,但它只是将字符串作为一个整体进行修剪,而不关注字符串内容中的每一行。

如果您需要修剪每一行,您可以执行以下操作:

string trimmedByLine = string.Join(
                             "\n", 
                             temp2.Split('\n').Select(s => s.Trim()));
于 2013-01-07T23:04:57.370 回答
13

这修剪每一行

temp2 = string.Join(Environment.NewLine, 
    temp2.Split(new []{Environment.NewLine},StringSplitOptions.None)
         .Select(l => l.Trim()));
于 2013-01-07T23:07:26.257 回答
1
string temp3 = String.Join(
                    Environment.NewLine, 
                    temp2.Split(new char[] { '\n', '\r' },StringSplitOptions.RemoveEmptyEntries)
                         .Select(s => s.Trim()));
于 2013-01-07T23:06:41.870 回答
0

拆分,修剪,加入

string[] lines = temp1.Split(new []{Environment.NewLine});
lines = lines.Select(l=>l.Trim()).ToArray();
string temp2 = string.Join(Environment.NewLine,lines);
于 2013-01-07T23:07:26.257 回答
0

您可以使用正则表达式来执行此操作。

这是执行此操作的 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# Regex.Replace 方法应该像 preg_replace 一样工作。

于 2013-01-07T23:10:35.343 回答
0

使用正则表达式的工作解决方案:

string TrimMultiline(string text)
{
    return new Regex(@"^[^\S\n]+(.+?)\s*$", RegexOptions.Multiline).Replace(text, "$1");
}

或者,如果您想要 TrimStart(这与 Martin Smith 的评论相同的 RegEx):

string TrimStartMultiline(string text)
{
    return new Regex(@"^[^\S\n]+(.+)$", RegexOptions.Multiline).Replace(text, "$1");
}
于 2021-09-11T16:22:03.847 回答
-1

题外话,但在 PowerShell 中使用此代码时请注意:

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

因为,不是很明显,$content是一个行数组,所以 PS 会神奇地Trim为每一行执行一个。

将其强制转换为字符串:

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

将不起作用,因为 PowerShell 然后删除了所有回车符以形成一行..!

于 2016-10-12T10:10:57.823 回答