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

PowerShell中Regex选择性插入换行失效问题求助

问题:在PowerShell中为列表块前后添加换行符

我通过$String = Get-Content -Path 'c:\temp\mytext.txt' -Raw将文本导入为单个字符串,原始内容如下:

Lorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque
- red
- green
- blue
Lorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque
ac adipiscing mauris ante class placerat per sem quisque phasellus sociosqu, mollis
- red
- green
- blue
bluorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque

需求是:在每一组以-开头的行的第一行前添加换行,最后一行后添加换行,期望输出如下:

Lorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque

- red
- green
- blue

Lorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque
ac adipiscing mauris ante class placerat per sem quisque phasellus sociosqu, mollis

- red
- green
- blue

bluorem ipsum et cras praesent mollis ullamcorper laoreet mauris imperdiet quisque

我之前尝试的正则在测试工具中有效,但在PowerShell中出现问题:

  • 针对列表开头:使用\n[^-].*(\n)-\s替换为\n$1时会截断行
  • 针对列表结尾:使用\n-\s.*(\n)[^-]替换为$1\n时出现异常

解决方案

可以通过两个精准的正则替换分别处理列表块的前后换行需求:

1. 为列表块开头添加换行

匹配非列表行末尾紧跟列表起始行的场景,在中间插入换行:

$String = $String -replace '(?<!- )(.*?)\n- ', "`$1`n`n- "
  • (?<!- ):负向后行断言,确保匹配位置前不是列表行的结尾,避免误匹配列表内部的换行
  • (.*?)\n- :匹配非列表行内容及后续的列表起始行开头
  • 替换后保留原非列表行,在中间插入一个换行再接列表起始行

2. 为列表块结尾添加换行

匹配列表最后一行(后续无其他列表行),在该行末尾添加换行:

$String = $String -replace '(- .*?)\n(?!-)', "`$1`n`n"
  • (- .*?)\n:匹配单个列表行内容及后续换行
  • (?!-):负向前瞻断言,确保下一行不以-开头(即当前行是列表的最后一行)
  • 替换后保留原列表行,在末尾多添加一个换行

完整执行代码

$String = Get-Content -Path 'c:\temp\mytext.txt' -Raw
# 处理列表开头换行
$String = $String -replace '(?<!- )(.*?)\n- ', "`$1`n`n- "
# 处理列表结尾换行
$String = $String -replace '(- .*?)\n(?!-)', "`$1`n`n"
# 输出结果
$String

原正则问题分析

  • 开头的正则\n[^-].*(\n)-\s使用贪婪匹配.*,会意外覆盖多行内容,同时未排除列表内部的换行场景,导致行截断
  • 结尾的正则\n-\s.*(\n)[^-]同样存在贪婪匹配问题,且未正确断言后续行是否为列表行,导致替换异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 15:42:02