gpt4 book ai didi

regex - PowerShell 中的多行正则表达式

转载 作者:行者123 更新时间:2023-12-04 09:40:30 25 4
gpt4 key购买 nike

我有这个 PowerShell 脚本,它的主要目的是搜索文件夹中的 HTML 文件,找到特定的 HTML 标记,并替换为我告诉它的内容。

我已经能够完成 3/4 的查找并完美替换。我遇到的问题涉及正则表达式。

这是我试图让我的正则表达式查找和替换的标记:

<a href="programsactivities_skating.html"><br />
</a>

这是我到目前为止的正则表达式,以及我在其中使用它的函数:
automate -school "C:\Users\$env:username\Desktop\schools\$question" -query '(?mis)(?!exclude1|exclude2|exclude3)(<a[^>]*?>(\s|&nbsp;|<br\s?/?>)*</a>)' -replace ''

这是自动化功能:
function automate($school, $query, $replace) {
$processFiles = Get-ChildItem -Exclude *.bak -Include "*.html", "*.HTML", "*.htm", "*.HTM" -Recurse -Path $school
foreach ($file in $processFiles) {
$text = Get-Content $file
$text = $text -replace $query, $replace
$text | Out-File $file -Force -Encoding utf8
}
}

大约 2 天以来,我一直试图找出解决方案,但似乎无法让它发挥作用。我已经确定这个问题是我需要告诉我的正则表达式来解释 Multiline,这就是我遇到的问题。

任何人都可以提供的任何帮助都非常感谢。

提前致谢。

最佳答案

Get-Content生成一个字符串数组,其中每个字符串包含输入文件中的一行,因此您将无法匹配跨越多行的文本段落。如果您希望能够匹配多行,则需要将数组合并为一个字符串:

$text = Get-Content $file | Out-String

或者
[String]$text = Get-Content $file

或者
$text = [IO.File]::ReadAllText($file)

请注意,第一种和第二种方法不保留输入文件中的换行符。正如 Keith 在评论中指出的那样,方法 2 只是简单地破坏了所有换行符,而方法 1 则放置了 <CR><LF>在加入数组时在每行的末尾。后者在处理 Linux/Unix 或 Mac 文件时可能是一个问题。

关于regex - PowerShell 中的多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21911293/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com