【发布时间】:2020-07-11 16:37:09
【问题描述】:
一个字符串(从 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...
【问题讨论】:
-
按原样使用您的代码,我得到一个包含两个项目的数组。实际电子邮件内容中是否有多个连续的换行符?
-
Out-Stringcmdlet 将“stuff”添加到输出中。通常在每行的末尾有cr/lf之类的东西。当您想查看某些东西的真正输出时,请勿使用 cmdlet。 [咧嘴] -
.Split()方法在 split-on-this 字符串中的每个 CHAR 上拆分,而不是在整个字符串上拆分。所以你在lf和cr上有一个分裂。这就是你的额外线路的来源。 [grin] mklement0 的回答是避免该故障的一种方法。 -
@Lee_Dailey 请注意,这在 PowerShell v6+ 中不再适用(现在优先使用
[string]分隔符的新 .NET Core 方法重载) - 这是始终更喜欢-split的一个很好的理由.Split(). -
@mklement0 - 谢谢你的提醒 [grin] ...我已经看到并忘记了。 [脸红]
标签: powershell newline line-breaks