【发布时间】:2025-12-04 14:25:01
【问题描述】:
我正在阅读一个看起来像的文本文件
<tr><td>W543562</td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td>W543563</td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td>W543564</td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td>W543565</td><td>OPEN</td><td>003</td><td>4</td></tr>
</tbody></table></div></div></body></html>
我对 W# 特别感兴趣。我想抢号码,然后回写到文本文件,变成这样变成超链接
<tr><td><a href="https://www.website.com/Order=W543562">W543562</a></td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td><a href="https://www.website.com/Order=W543563">W543563</a></td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td><a href="https://www.website.com/Order=W543564">W543564</a></td><td>OPEN</td><td>003</td><td>4</td></tr>
<tr><td><a href="https://www.website.com/Order=W543565">W543565</a></td><td>OPEN</td><td>003</td><td>4</td></tr>
</tbody></table></div></div></body></html>
我拥有的是
$text = [IO.File]::ReadAllText("C:\Temp\parse3.txt")
$url = "https://www.website.com/=W"
$Matches = [regex]::matches($text, "<td>W([\s\S]*?)</td>")
foreach ($match in $Matches)
{
Write-Output $match.Groups[1].Value.Trim();
}
它会拉出 W# 并将其显示在每一行上,但我需要将每一个存储到一个变量中,然后使用它写回每一行并连接 $url
理想情况下,如果我可以将代码缩减为 Select-String "<td>W-</td>" | Add-Content $url+w# 之类的内容,那就太好了。但据我所知,Select-String 不适合在其他字符之间选择字符并修剪开头和结尾。更不用说找到特定范围的动态字符了。
有什么想法吗?
【问题讨论】:
-
@MadPhysicist 那里有很多东西要解压。我在另一篇文章中被告知要研究正则表达式以解决我的问题。当我使用 PowerShell 解析 .txt 文件以返回文本时,它与实际的 HTML 标记无关。我正在解析纯文本,以便将
Add-Content之类的操作返回到文件中。我觉得不是。它不能解决我的问题。但不错的尝试。 -
不要使用 RegEx 解析 HTML。 *.com/a/1732454/1936966 。使用 HTMLagilityPack 或类似的东西
标签: html regex powershell url