gpt4 book ai didi

regex - 为什么使用替换功能从 PowerShell 中的多行字符串中删除空行失败?

转载 作者:行者123 更新时间:2023-12-01 07:06:51 26 4
gpt4 key购买 nike

我正在加载 HTML 电子邮件,首先删除 HTML 标签,然后替换每个  一个空格,我将双空格减少一个空格 - 有效。

但是现在我有很多无法删除的空行。我看过在读取文件时删除空行的示例,但是在删除 HTML 标记和空格之前我没有任何空行。

我愿意:

$m = [IO.File]::ReadAllText("$emailFolder\$fName")
$m = $m -replace "<((?!@).)*?>" # removes all html tag but not adr: <John.Doe@Doe.com>
$m = $m -replace "&nbsp;"," "
$m = $m.Replace(' ',' ').Replace(' ',' ').Replace(' ',' ')
$m = $m.Replace('`r','').Replace('`n`n','`n').Replace('`n`n','`n') # does nothing :(

我尝试了各种版本,都没有删除空行。任何想法,我怎么能做到这一点?

除此之外,我尝试使用正则表达式乘数来查找一行中的空格并失败了。

我做错了什么?
$m = $m.Replace(' +',' ')  # does not work
$m = $m.Replace('\s+',' ') # does not work either

最佳答案

如果我理解正确,您不想删除所有换行符,只删除“空”行(只包含空格的行)。

考虑这个示例字符串:

$multiLine = "Line 1`r`nLine 2`nLine 3`r`n`r`n  `n `t `r`nLine 7`r`n"

显示时,它在屏幕上看起来像这样:
Line 1
Line 2
Line 3



Line 7

第 4 行实际上是一个空行,只有一个 CRLF。第 5 行是一个空格后跟一个 LF,第 6 行是一个空格、一个制表符、一个空格,然后是一个 CRLF。我混合了行尾,因为 HTML 可能是一团糟;为任何事情做好准备是件好事!

要处理所有这些,您可以进行如下替换:
$multiLine -creplace '(?m)^\s*\r?\n',''

这有什么作用?
  • -creplace只是 -replace 的区分大小写的版本(我喜欢直截了当)。
  • (?m)是设置 regular expression modes 的内联方式. m模式代表多行,它让 ^$ anchor 匹配字符串中每一行的开头/结尾(而不是字符串的开头和结尾)。 我认为这是解决您问题的关键。
  • 我们正在使用 ^匹配每一行的开头,然后使用 \s 匹配 0 个或多个空格类,其中包括选项卡。
  • 我们匹配一个可选的回车(对于 Windows 换行符),然后是一个换行符。我们不需要匹配这些的倍数,因为 ^将在整个字符串中捕获它们。

  • 结果输出
    Line 1
    Line 2
    Line 3
    Line 7

    关于regex - 为什么使用替换功能从 PowerShell 中的多行字符串中删除空行失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106675/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com