使用正则表达式解析:将链接从一个html标签复制到另一个html标签

使用正则表达式解析:将链接从一个html标签复制到另一个html标签

我需要将链接从规范 html 标签复制到下面的其他标签

<link rel="canonical" href="https://website.com/en/camera.html" />

<div class="somers"><a href="https://website/fffffon.html" class="flags bg" hreflang="bg" title="bk"></a>
<a href="https://website.com/test-lofet.html" class="flags sk" hreflang="sk" title="sk"></a>
<a href="https://website.com/america.html" class="flags uk" hreflang="uk" title="uk"></a>

输出应该是

<div class="somers"><a href="https://website.com/en/camera.html" class="flags bg" hreflang="bg" title="bk"></a>
<a href="https://website.com/en/camera.html" class="flags sk" hreflang="sk" title="sk"></a>
<a href="https://website.com/en/camera.html" class="flags uk" hreflang="uk" title="uk"></a>

我的解决方案仅替换第一行......

搜索: (?s)<link rel="canonical" href="(.*?)"\h/>.*?<a href="\K.*?(?="\hclass="flags)

替换为: \1

答案1

我找到了一个与 PowerShell 兼容的解决方案,它将用规范链接标签替换所有行:

$sourcedir = "C:\Folder1\"
$resultsdir = "C:\Folder1\"

Get-ChildItem -Path $sourcedir -Filter *.html | ForEach-Object {
    $content = Get-Content -Path $_.FullName -Raw
    $replaceValue = (Select-String -InputObject $content -Pattern '(?<=<link rel="canonical" href=").+(?=" />)').Matches.Value
    $content = $content -replace '(?<=<a href=").+(?=</a>)',$replaceValue
    Set-Content -Path $resultsdir\$($_.name) $content
}

相关内容