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

如何用正则从HTML表格每行第4个<td>标签开始删除内容?

解决HTML表格批量删除指定单元格的正则问题

你需要处理PowerShell生成的已安装软件列表HTML,要删掉每行<tr>里从第4个<td>开始的所有内容,只保留前3个<td>和<tr>的结构对吧?先看你给的原始HTML行示例:

<tr><td>Adobe Acrobat Reader DC</td><td>18.009.20050</td><td>20171130</td><td>kratos.kcprod1.com</td><td>4104917a-93f2-46e5-941a-c4efd54504b7</td><td>True</td></tr>
<tr><td>Adobe Flash Player 28 ActiveX</td><td>28.0.0.137</td><td></td><td>kratos.kcprod1.com</td><td>4104917a-93f2-46e5-941a-c4efd54504b7</td><td>True</td></tr>

原来的正则问题分析

你用的(?<=<td>)(.*)(?=<\/tr>)会选中整行,是因为这个正则从第一个<td>的结束位置开始,一直匹配到</tr>前的所有内容,没有限制匹配起点是第4个<td>,范围太宽泛了。

正确的正则表达式

试试这个正则来匹配你需要删除的部分:

(<td>.*?<\/td>){3}\K.*?(?=<\/tr>)

我给你拆解下每个部分的作用:

  • (<td>.*?<\/td>){3}:精准匹配前3个完整的<td>单元格,{3}指定匹配次数,.*?是非贪婪匹配,避免把多个<td>内容当成一个整体匹配
  • \K:这个是核心技巧,它会忽略掉前面已经匹配到的内容(也就是前3个<td>),只把后面的内容作为最终匹配结果
  • .*?(?=<\/tr>):匹配从第4个<td>开始到</tr>前的所有内容,同样用非贪婪匹配防止跨行匹配错误

替换时直接把匹配到的内容换成空字符串,就能得到你想要的结果:只保留前3个<td>和<tr>的首尾标签。

更高效的优化方案:从源头避免额外处理

其实你完全不用生成HTML后再用正则修改,直接在PowerShell脚本里就能生成只包含需要列的HTML!看你现在的脚本最后是Select-Object -Property DisplayName, DisplayVersion, InstallDate | ft,这里的ft(Format-Table)可能会额外生成一些PowerShell默认的列,导致HTML里多出不需要的单元格。

改成用ConvertTo-Html直接生成指定列的HTML,一步到位:

| Select-Object -Property DisplayName, DisplayVersion, InstallDate | ConvertTo-Html -Property DisplayName, DisplayVersion, InstallDate -Title "已安装软件列表"

这样生成的HTML表格就只有你需要的三列,完全不用再做后续的正则修改,既高效又不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:11:20