gpt4 book ai didi

powershell - 如何分割包含换行符的字符串

转载 作者:行者123 更新时间:2023-12-03 00:27:15 24 4
gpt4 key购买 nike

字符串(从Outlook电子邮件body.innerText中提取)包含嵌入式换行符。如何将其拆分为字符串数组?
我希望将示例字符串拆分为两(2)个项目的数组。取而代之的是,它变成由三(3)个项目组成的数组,中间有一个空白行。

PS C:\src\t> ("This is`r`na string.".Split([Environment]::NewLine)) | % { $_ }
This is

a string.
PS C:\src\t> "This is `r`na string.".Split([Environment]::NewLine) | Out-String | Format-Hex

00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000 54 68 69 73 20 69 73 20 0D 0A 0D 0A 61 20 73 74 This is ....a st
00000010 72 69 6E 67 2E 0D 0A ring...

最佳答案

要将CRLF序列作为一个整体作为分隔符,使用基于正则表达式的 -split 运算符会更简单:

PS> "This is `r`n`r`n a string." -split '\r?\n'
This is
a string.
注意:
  • \r?\n匹配CRLF(Windows风格)和仅LF(Unix风格)换行符;如果您确实只想匹配CRLF序列,请使用\r\n
  • 注意使用单引号字符串('...'),以便将包含regex的字符串原样传递给.NET regex引擎。正则表达式引擎使用\作为转义字符;因此使用\r\n

  • PowerShell的-split运算符通常是[string] .NET类型的.Split()方法的高级替代方法-请参见this answer

  • 至于 您尝试了什么:
    在Windows上,分隔符参数 [Environment]::NewLine是字符串 "`r`n",即CRLF序列。
  • 在PowerShell [Core] v6 +中,您的命令确实起作用,因为该字符串作为一个整体被视为分隔符。
  • 在Windows PowerShell中,正如Steven在his helpful answer中指出的那样,单个字符-CR和LF分别被视为分隔符,从而在结果数组中导致一个额外的空元素-CR和LF之间的空字符串。

  • 这种行为上的变化发生在PowerShell的控制之外:.NET Core引入了一个新的 .Split()方法重载,该重载带有 [string]类型的分隔符参数,PowerShell的重载解析算法现在选择了带有 [char[]]类型的参数的较早重载。
    避免这种不可避免的(尽管很少)无意的行为更改是另一个优先选择PowerShell本地 -split运算符而不是.NET [string]类型的 .Split()方法的好理由。

    关于powershell - 如何分割包含换行符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62851890/

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