【问题标题】:Powershell regex to capture string after new linePowershell 正则表达式在换行后捕获字符串
【发布时间】:2020-04-17 10:06:03
【问题描述】:

我在这个正则表达式捕获中遇到了最困难的时间。基本上,我导入了一个 csv,其中脚本读取列中的文本并捕获文本中的字符串,将其放入变量中。 我遇到的问题是捕获也捕获回车。怎么不捕获回车呢?

例如,文本如下:

check the following key:
HKLM:\Software\yadda\yadda

代码:

if($file.col2 -match "following key:(?<path>\s*(\S+\s*\S+))"){
  $Matches['path']
}

【问题讨论】:

    标签: regex powershell


    【解决方案1】:

    如果您的两行字符串通过Get-Content -Path $FullFileName -Raw 之类的方式放在$InStuff 中,您可以使用(?m) 多行正则表达式选项和命名捕获组将路​​径放入$Matches.Path 中,如下所示...

    $InStuff = @'
    check the following key:
    HKLM:\Software\yadda\yadda
    '@
    
    $Null = $InStuff -match '(?m)(?<Path>.+:\\.+)$'
    $Path = $Matches.Path
    
    $Path
    

    输出 = HKLM:\Software\yadda\yadda

    【讨论】:

    • Lee_Dailey,这适用于 csv 吗?我正在运行一个 foreach 循环,因为这是一个大约 2k 行的 csv。
    • @light270 - 嗯......它应该。我没有测试,因为你没有提到它。 [grin] 正则表达式模式适用于任何 dotnet/PoSh 设置,因此只需将其放在代码需要的地方即可。
    • 谢谢。你让我走上了正确的道路。在查看并使用了所有正则表达式之后,我正在使用 HKLM 线捕获回车。我仍然不确定这是否是最好的方法,但我发现这有效:“(?ms)(?.*)(\s)”
    • @light270 - 酷!我很高兴能帮上忙……而且你让它在你需要的时候工作! [咧嘴]
    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 2020-03-23
    • 2012-08-20
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多