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

PowerShell中正则表达式匹配换行符失效问题求助

解决PowerShell中Markdown表格转HTML时的正则多行匹配问题

核心问题分析

  • Get-Content 默认行为导致多行匹配失败:使用Get-Content读取文件时,默认返回字符串数组(每行一个元素),-Replace运算符会逐行处理数组元素,跨三行的正则表达式自然无法找到匹配项。
  • 硬编码换行符兼容性差:正则里写死\r\n仅匹配Windows风格换行,若文件是Unix风格(仅\n)也会匹配失败。

解决方案

1. 读取文件时使用 -Raw 参数

将整个文件读取为单一字符串,确保正则可以匹配跨多行内容:

$currentfile_data = Get-Content $currentfile_path -Raw

2. 调整正则表达式与替换字符串

  • 用\r?\n兼容Windows/Unix两种换行格式;
  • 优化空格匹配逻辑,提升正则灵活性;
  • 替换字符串中使用PowerShell原生换行转义符`n(反引号+n),而非\n(PowerShell中\n是普通字符)。

修改后的替换代码:

$currentfile_data -Replace '([ \t]*)\| (.*?) \| (.*?) \| (.*?) \|\r?\n[ \t]*\|.*?\|.*?\|.*?\|\r?\n[ \t]*\| (.*?) \| (.*?) \| (.*?) \|',
"$1<table>`n$1`t<tr align=`"center`" valign=`"middle`">`n$1`t`t<th>`$2</th>`n$1`t`t<th>`$3</th>`n$1`t`t<th>`$4</th>`n$1`t</tr>`n$1`t<tr align=`"center`" valign=`"middle`">`n$1`t`t<td>`$5</td>`n$1`t`t<td>`$6</td>`n$1`t`t<td>`$7</td>`n$1`t</tr>`n$1</table>"

3. 效果验证

用你提供的测试Markdown表格运行修改后的脚本,将得到符合预期的HTML输出:

<table>
    <tr align="center" valign="middle">
        <th>th1</th>
        <th>th2</th>
        <th>th3</th>
    </tr>
    <tr align="center" valign="middle">
        <td>td1</td>
        <td>td2</td>
        <td>td3</td>
    </tr>
</table>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:36:07