从文本文件中提取网址

问题描述 投票:0回答:2

我有一个大文本文件,其中包含文本在浏览器中查看此电子邮件,然后是一个 URL。它可能会有所不同,有时 URL 的一部分会进入下一行。

此外,当它确实进入下一行时,末尾有一个等号需要删除,但可能存在的任何其他等号都没有。

几个例子:

在浏览器中查看此电子邮件 (https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be)

在浏览器中查看此电子邮件

在浏览器中查看此电子邮件 (https://eg.com/?e=3D1460&u=3Df6510b&id=3D2c8be)

我需要使用 PowerShell 提取该 URL,不带方括号(括号),有时可以是 < > 这样我就可以将它下载为 HTML 文件。

 `if ($str -match '(?<=\()https?://[^)]+') {
 #  # ... remove any line breaks from it, and output the result.
  $Matches.0 -replace '\r?\n'
 }

 if ($str -match '(?<=\<)https?://[^>]+') {
 #  # ... remove any line breaks from it, and output the result.
  $Matches.0 -replace '\r?\n'
 }`
html powershell url
2个回答
0
投票

此解决方案适用于您提供的示例:

    $text = @(
    'View this email in your browser (https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be)',
    'View this email in your browser <https://mail.com/?e=3D14=
60&u=3Df612577510b&id=3D2c8be>',
    'View this email in your browser (https://eg.com/?e=3D1460&u=3Df6510b&id=3D2c8be)'
)

$text = $text | ForEach-Object {
    $PSItem.Replace('<','(').Replace('>',')').Replace("=`n",'').Split('(')[1].Replace(')','')
}

输出如下所示:

https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be
https://mail.com/?e=3D1460&u=3Df612577510b&id=3D2c8be
https://eg.com/?e=3D1460&u=3Df6510b&id=3D2c8be

我只是使用没有正则表达式的替换。 你在拆分 url 上遇到的问题是通过做

解决的
.Replace("=`n")

0
投票
  • 由于您正在尝试跨行匹配,因此您需要确保将您的文本文件作为一个整体读取,即作为单个多行字符串,您可以使用

    -Raw
    开关
    Get-Content
    cmdlet.

  • 除此之外,您的正则表达式中唯一缺少的就是匹配并删除换行符之前的前导

    =

以下从输入文件

file.txt
中提取所有URL,并将它们输出——删除换行符和行尾
=
——作为字符串数组:

# Note the '=' before '\r?\n'
[regex]::Matches(
  (Get-Content -Raw file.txt),
  '(?<=[<(])https://[^>)]+'
).Value -replace '=\r?\n'
  • 直接使用

    [regex]::Matches()
    .NET API 允许您一次提取 all 匹配项,而 PowerShell 的
    -match
    运算符只会查找 one 匹配项。

  • -replace
    然后用于从匹配中删除换行符(
    \r?\n
    ),以及前面的
    =
    .

有关 URL 匹配正则表达式的解释以及使用它进行试验的能力,请参阅this regex101.com page


多行字符串文字示例:

[regex]::Matches('
View this email in your browser (https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be)

View this email in your browser <https://mail.com/?e=3D14=
60&u=3Df612577510b&id=3D2c8be>

View this email in your browser (https://eg.com/?e=3D1460&u=3Df6510b&id=3D2c8be)
  ',
  '(?<=[<(])https://[^>)]+'
).Value -replace '=\r?\n'

输出:

https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be
https://mail.com/?e=3D1460&u=3Df612577510b&id=3D2c8be
https://eg.com/?e=3D1460&u=3Df6510b&id=3D2c8be
© www.soinside.com 2019 - 2024. All rights reserved.