将正则表达式匹配的结果存储到变量中,然后将其写入文本文件 - PowerShell

6 浏览
0 Comments

将正则表达式匹配的结果存储到变量中,然后将其写入文本文件 - PowerShell

我正在阅读一个看起来像这样的文本文件:

W543562OPEN0034
W543563OPEN0034
W543564OPEN0034
W543565OPEN0034

我特别关注W#。我想抓取这个数字,然后写回到文本文件,使其看起来像这样,以便将其转换为超链接:

W543562OPEN0034
W543563OPEN0034
W543564OPEN0034
W543565OPEN0034

我有以下代码:

$text = [IO.File]::ReadAllText("C:\Temp\parse3.txt")
$url = "https://www.website.com/Order=W"
$Matches = [regex]::matches($text, "W([\s\S]*?)")
foreach ($match in $Matches)
{
    Write-Output $match.Groups[1].Value.Trim();
}

它提取了W#并在每行上显示,但我需要将每个W#存储到一个变量中,然后使用它来写回每一行并连接$url

理想情况下,如果我可以将代码简化为类似于Select-String "

W-

" | Add-Content $url+w#,那就太好了。但据我所知,Select-String不适用于选择其他字符之间的字符并修剪开头和结尾。更不用说找到一系列特定的动态字符了。

有什么想法吗?

0
0 Comments

问题出现的原因是用户希望将正则表达式匹配的结果保存到变量中,并将其写入文本文件。用户尝试使用以下代码实现这个目标:

$text = [IO.File]::ReadAllText("C:\Temp\parse3.txt")
$url = "https://www.website.com/Order="
[regex]::Matches($text, "W\d{6}") | % { $text = $text -replace $_.Value, "<a href=`"$url$($_.Value)`">$($_.Value)</a>" }
$text

这段代码使用正则表达式查找匹配的结果,并将其替换为带有超链接的字符串。用户希望将替换后的结果保存到文本文件中。然而,在尝试添加 `| Out-File C:\Temp\parse4.txt` 保存文件时,却只保存了一个空文件。

问题的解决方法是将更改后的 `$text` 输出到管道中,然后使用 `Out-File` 命令将其保存到文件中。用户可以将以下代码添加到原始代码的末尾来解决问题:

$text | Out-File C:\Temp\parse4.txt

这样就可以将更改后的 `$text` 保存到指定的文本文件中。

然而,用户在处理较大的文件时遇到了 `System.OutOfMemoryException` 错误。对于较大的文件,可能需要使用文件流来逐行进行替换操作,以避免内存问题。用户可以参考链接中提到的方法进行操作:stackoverflow.com/questions/2783837/…

另外,用户还提到正则表达式只能匹配以 "W" 开头的 6 位数字的情况,而无法匹配其他形式的字符串,如 "WEL11" 和 "W2310OS"。针对这个问题,可以使用正则表达式的 "或" 运算符来匹配这些情况。例如,可以使用 `W\d{6}|WEL\d{2}|W\d{4}OS` 的正则表达式来匹配这些不同的字符串形式。不过需要注意的是,在处理较大的文件时,也可能会出现意外的匹配情况,因此可能需要更具体的正则表达式或使用正则表达式的 "lookarounds" 功能来解决这个问题。用户可以参考这个链接了解更多信息:regular-expressions.info/lookaround.html

0