我有一个大的文本文件,其中包含如下内容:
View this email in your browser (https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2bb1612577510b&id=3D2c8be)
有时,URL的一部分会转到下一行。
我只需要使用PowerShell提取该URL,不需要括号(圆括号),这样我就可以将其作为HTML文件下载。
我已经尝试过批量执行此操作,这是我最熟悉的,但事实证明这是不可能的,似乎这在PowerShell中是可能的。
下面使用基于正则表达式的操作符和。net api。
在这两个解决方案中,-replace 'r?n'
使用-replace
操作符(r?n
是一个正则表达式,匹配windows格式的CRLF和unix格式的仅限lf的换行符)从找到的URL中删除任何嵌入的换行符(换行符)。
- 如果您只需要一个或第一个URL,请使用
-match
操作符,如果返回$true
,则报告自动$Matches
变量变量中匹配的内容。
# Sample multi-line input string.
# To read such a string from a file, use, e.g.:
# $str = Get-Content -Raw file.txt
$str = @'
Initial text.
View this email in your browser (https://us15.campaign-archive.com/?e=3D1460&u=3Df6e2b
b1612577510b&id=3D2c8be)
More text.
'@
# Find the (first) embedded URL...
if ($str -match '(?<=()https?://[^)]+') {
# ... remove any line breaks from it, and output the result.
$Matches.0 -replace 'r?n'
}
- 如果您需要所有(或固定计数)的匹配,则需要直接使用
System.Text.RegularExpressions.Regex.Matches
.NET API:
# Extract *all* URLs and remove any embedded line breaks from each
[regex]::Matches(
$str,
'(?<=()https?://[^)]+'
).Value -replace 'r?n'
有关第一个正则表达式的解释和使用它的能力,请参阅regex101.com页面。