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

如何修改PowerShell正则函数批量提取多段内容并写入编号文件?

修改PowerShell函数以提取多组指定字符串间内容并分文件保存

原函数仅能提取一对字符串间的单段内容,以下是修改后的实现,可按顺序提取文本中所有“Lorem”与“is”之间的内容(保留段落结构),并分别写入001.txt、002.txt等编号文件:

function GetStringBetweenTwoStrings($firstString, $secondString, $importPath, $outputDir = ".") {
    # 读取整个文件内容(保留换行和段落结构)
    $fileContent = Get-Content $importPath -Raw
    # 构建正则匹配模式,启用单行模式以让.匹配换行符
    $pattern = "(?s)$firstString(.*?)$secondString"
    # 获取所有匹配结果
    $matches = [regex]::Matches($fileContent, $pattern)

    # 遍历匹配结果,分文件保存
    for ($i = 0; $i -lt $matches.Count; $i++) {
        $outputFileName = "{0:000}.txt" -f ($i + 1)
        $outputPath = Join-Path -Path $outputDir -ChildPath $outputFileName
        # 将匹配到的内容写入文件,保留原格式
        $matches[$i].Groups[1].Value | Set-Content -Path $outputPath -Encoding UTF8
    }
}

关键改动说明:

  • 添加-Raw参数读取文件:确保将整个文本作为单个字符串读取,保留原有的换行、段落结构,避免正则匹配被行分割打断
  • 使用[regex]::Matches替代[regex]::Match:获取文本中所有符合条件的匹配项,而非仅第一个
  • 正则模式添加(?s)单行修饰符:让正则中的.可以匹配换行符,确保跨段落的内容也能被正确提取
  • 新增输出目录参数$outputDir:默认输出到当前目录,也可指定自定义路径
  • 生成三位编号文件名:通过{0:000}.txt格式化字符串,保证文件名按001、002顺序排列

调用示例:

# 提取test.txt中所有Lorem与is之间的内容,保存到C:\Temp\Output目录
GetStringBetweenTwoStrings -firstString "Lorem" -secondString "is" -importPath "C:\Temp\test.txt" -outputDir "C:\Temp\Output"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 21:25:17