You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Get-Content -Raw后PowerShell正则匹配返回空的解决方法

PowerShell提取带换行文本块:解决-Raw模式下正则匹配为空的问题

需求

提取文件中带换行的文本块,后续将结构统一但格式各异的文件内容拆分至CSV。

问题

使用$variable = Get-Content $fromfile时,自定义的FindBetween函数能定位到目标文本,但文本丢失换行符,无法满足后续解析需求;改用Get-Content $fromfile -Raw保留换行符后,正则匹配返回空结果,尝试添加\r\n、数组转换@()、指定-Delimiter \n等方法均未解决问题。

解决方法

在正则表达式开头添加(?ms)修饰符:

  • (?m):启用多行模式,让^和$匹配每行的开头与结尾
  • (?s):启用单行模式,让.匹配包括换行符在内的所有字符

完整代码示例

param($fromfile)

$working = Get-Content $fromfile -Raw

function FindBetween($first, $second, $importing){
    # 添加(?ms)修饰符适配多行带换行的文本匹配
    $pattern = "(?ms)$first(.*?)$second"
    
    $result = [regex]::Match($importing, $pattern).Groups[1].Value
    # 也可使用Select-String实现,取消注释下方代码即可
    # $result = (Select-String -InputObject $importing -Pattern $pattern).Matches.Groups[1].Value

    return $result
}

# 调用函数提取指定标识间的文本并保存
FindBetween -first "host ####" -second "#### flag 2" -importing $working | Out-File "testresult.txt"

测试文件内容

#### flag 1 host ####

stuff in between

#### flag 2 server ####

#### process manager ####

内容的提问来源于stack exchange,提问作者Alex Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:45:32