gpt4 book ai didi

regex - PowerShell正则表达式如何与多行字符串一起使用?

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

好吧,这让我发疯了,因为我的正则表达式在Rubular上运行,但是PowerShell无法按我预期的那样工作。

  • 我在网络目录上执行了Get-ChildItem,然后将输出定向到txt文件中。
  • 我去掉了如下所示的文本文件中的目录信息:


  • 当我使用PowerShell尝试编写正则表达式以删除目录信息时,遇到了一些问题。

  • 当我使用时:
    $var = Get-Contnet "file path"
    $var -match "Directory.*"

    PowerShell捕获我要查找的文本,但是它没有捕获以新行开头的文本,我得到:
    Directory: \\Drive\Unit\Proposals\Names\Location\crazy folder path\even crazier folder path\unbelievable folder path\

    所以...当我使用:
    $var -match "Directory.*\n.*"

    我什么也没得到

    当我在Rublar上尝试此功能时,它工作正常,我在这里错过了什么?任何帮助将是巨大的,谢谢!

    最佳答案

    Filburt的答案是一个很好的答案,而且看起来正则表达式似乎不是在这里使用的最佳工具。但是,您遇到了一个问题,可能会再次引起困惑。这里的问题是,您用Get-Content填充的变量不是多行字符串。它是一个字符串数组:

    $var = Get-Content "file path"
    $var.GetType() # Shows 'Object[]'

    当您对 $var运行一个正则表达式匹配项时,它将分别与数组中的每个对象(文件中的每一行)进行匹配。它不能匹配到行尾,因为下一行是一个新对象。

    此处的一种解决方法是将字符串数组展平为单个字符串,如下所示:
    $var = (Get-Content "file path" | Out-String)
    $var.GetType() # Shows 'String' now

    在Powershell中,有时候要告诉您何时要处理单个String对象而不是一个String数组可能很棘手。如果将它们输出到控制台,则它们看起来相同。在这些情况下, GetType()Out-String可能是有用的工具。

    编辑:从Powershell 3.0开始, Filesystem提供程序包括 -RawGet-Content开关。该开关指示 Get-Content一次读取所有文件,而不将其拆分为大块。它比使用 Out-String变通方法要快得多,因为它不会浪费时间将片段拆开只是将它们重新放在一起。

    关于regex - PowerShell正则表达式如何与多行字符串一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11015812/

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