加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PowerShell中的多行正则表达式

发布时间:2020-12-14 06:24:40 所属栏目:百科 来源:网络整理
导读:我有这个Power Shell脚本,其主要目的是搜索文件夹中的HTML文件,找到特定的HTML标记,并替换为我告诉它的内容. 我已经能够完成3/4的发现并完全取代.我遇到麻烦的是涉及正则表达式. 这是我试图让我的正则表达式找到并替换的标记: a href="programsactivities_s
我有这个Power Shell脚本,其主要目的是搜索文件夹中的HTML文件,找到特定的HTML标记,并替换为我告诉它的内容.

我已经能够完成3/4的发现并完全取代.我遇到麻烦的是涉及正则表达式.

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

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

这是我到目前为止的正则表达式,以及我在其中使用的函数:

automate -school "C:Users$env:usernameDesktopschools$question" -query '(?mis)(?!exclude1|exclude2|exclude3)(<a[^>]*?>(s|&nbsp;|<brs?/?>)*</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)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读