PowerShell如何提取WPL文件中<seq>与</seq>间的多行内容?
解决WPL文件提取
<seq>内多行内容的问题 问题根源
你当前代码失效的核心原因:
Get-Content默认返回字符串数组,传递给[regex]::Match时会被拼接成单字符串,数组元素间的换行被替换为空格,导致原格式丢失- 正则未启用单行模式,
.*?无法匹配换行符,无法跨多行捕获<seq>与</seq>之间的完整内容
修正后的PowerShell代码
$fileName = "C:\Users\user\Music\Playlists\1.wpl" # 用-Raw参数读取整个文件为单字符串,保留原始换行与格式 $file = Get-Content $fileName -Raw # 启用单行模式(?s),让.匹配换行符;精准捕获<seq>标签内的内容 $pattern = "(?s)<seq>(.*?)</seq>" # 提取内容后分割成行,过滤空行并去除首尾缩进 $results = [regex]::Match($file, $pattern).Groups[1].Value -split [Environment]::NewLine | Where-Object { $_ -match '\S' } | ForEach-Object { $_.Trim() } $results
代码关键说明
Get-Content -Raw:一次性读取文件全部内容,完整保留换行、缩进等原始格式- 正则单行模式
(?s):让正则中的.可以匹配换行符,确保跨多行捕获目标内容 - 格式清理:
- 按换行分割内容为数组
- 过滤空行或仅含空白的无效行
- 去除每行首尾的缩进空白,得到整洁的
<media>标签行
最终输出结果
<media src="C:\Users\user\Downloads\Katzianerova vojna.mp3"/> <media src="C:\Users\user\Downloads\Rat i mir u povijesti III- dio.mp3"/>
内容的提问来源于stack exchange,提问作者overflowed
相关产品推荐
相关产品推荐

