从带有变量的字符串中删除一行而不留下新行

时间:2018-04-04 14:23:46

标签: regex powershell

使用以下代码将字符串写入RichTextBox

$TextBox.text = "`r`n Some Text `r`n" + $TextBox.text

在某些情况下,我需要从文本中删除特定行。问题是,我设法找到并删除该行,但文本的其余部分仅移动1行而不是2

$TextBox.text = (($TextBox.text -split "`n") | ? {$_ -notmatch 'WordToSearch'}) -join "`n"

正如我所说,它删除了线,但仍然存在不必要的新线。如何在不使用数组或其他复杂方法的情况下删除它?

例如,这就是文本的外观:

\\empty line
row 1, some text
\\empty line
row 2, some text
\\empty line

在我尝试删除第1行后,它看起来像这样:

\\empty line
\\empty line
row 2, some text
\\empty line

预期:

\\empty line
row 2, some text
\\empty line

2 个答案:

答案 0 :(得分:1)

这是从字符串中删除空行的一种方法:

$str = "Line 1`r`n`r`n`r`nLine 4`r`n`r`nLine 6"
while ( $str -match "`r`n`r`n" ) {
  $str = $str -replace "`r`n`r`n","`r`n"
}
$str
# now $str contains only "Line 1", "Line 4", and "Line 6"

答案 1 :(得分:0)

您应该可以使用-replace然后使用.trim()来确保您不会有多个空白行(如果要移除的行是最后一行),那么请添加您的最终行空白行返回+'`r`n'

$find = "row 1"
$TextBox.text = ($TextBox.text -replace "(?mi)^.*$find.*`$(`r?`n)*",'').trim()+'`r`n'