【问题标题】:Split producing an array of lines rather than paragraphs拆分产生行数组而不是段落
【发布时间】:2020-01-17 12:09:23
【问题描述】:

我正在尝试将字符串分成段落,分隔线位于字符“/*”的出现之间。当前使用 split 函数创建一个数组,其中每个元素都是文本的新行而不是整个段落.在我当前使用的下面的代码中,我已经转义了 * 但似乎我仍然遗漏了一些东西。谢谢。

$scripts = $allScripts -split "/\*"

预期输出:

$scripts[0] = "ABC
DEF
GHI"

实际输出:

$scripts[0] = "ABC"
$scripts[1] = "DEF"
$scripts[2] = "GHI"

【问题讨论】:

  • 你的意见是什么?
  • 如果你尝试$allScripts -replace "/\*","`n"会怎样?

标签: arrays powershell split


【解决方案1】:

您可以使用字符串库中的 join,通过换行符加入:

> [String]::Join("`n", $allScripts -split "/\*")
ABC
DEF
GHI

这是通用的,用于将string[] 连接到单个多行字符串。

但是,在这种特定情况下,@AdminOfThings 有更优雅的解决方案,将您的特殊换行符替换为实际的换行符:

> $allScripts -replace "/\*", "`n"
ABC
DEF
GHI

【讨论】:

    【解决方案2】:

    刚刚发现问题,问题实际上在于读取文件的 Get-Content 方法,因为这会生成数组而不是字符串。

    这是通过将数组转换为字符串来解决的:

    $scripts = ("$allScripts") -split [Regex]::Escape("/*")
    

    这产生了一个额外的副作用,即删除所有换行符,从而产生一个连续的文本块。已通过将 -raw 参数添加到 Get-Content 来解决此问题:

    $allScripts = Get-Content -Path $file -Raw
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多