用powershell中的regex替换子字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用powershell中的regex替换子字符串相关的知识,希望对你有一定的参考价值。
我在powershell中有以下正则表达式代码来识别我需要更新的URL:
'href[s]?=[s]?"[^"]*(https://oursite.org/[^"]*News and Articles[^"]*)+"'
'href[s]?=[s]?"[^"]*(https://oursite.org/[^"]*en/News-and-Articles[^"]*)+"'
这些让我得到了我需要更新的结果,现在我需要知道如何用“新闻和文章”替换“新闻和文章”的值和“新闻和文章”的“en”。
我有一些代码有一个替换网址,如下所示:
$newUrl = 'href="https://oursite.org/"' #replaced value
所以最初的结果是:
https://www.oursite.org/en/News-and-Articles/2017/11/article-name
被替换为
https://www.oursite.org/news-and-articles/2017/11/article-name
这是贯穿所有文章并进行替换的函数:
function SearchItemForMatch
{
param(
[Data.Items.Item]$item
)
Write-Host "------------------------------------item: " $item.Name
foreach($field in $item.Fields) {
#Write-Host $field.Name
if($field.Type -eq "Rich Text") {
#Write-Host $field.Name
if($field.Value -match $pattern) {
ReplaceFieldValue -field $field -needle $pattern -replacement $newUrl
}
#if($field.Value -match $registrationPattern) {
# ReplaceFieldValue -field $field -needle $registrationPattern -replacement $newRegistrationUrl
#}
if($field.Value -match $noenpattern){
ReplaceFieldValue -field $field -needle $noenpattern -replacment $newnoenpattern
}
}
}
}
这是替换方法:
Function ReplaceFieldValue
{
param (
[Data.Fields.Field]$field,
[string]$needle,
[string]$replacement
)
Write-Host $field.ID
$replaceValue = $field.Value -replace $needle, $replacement
$item = $field.Item
$item.Editing.BeginEdit()
$field.Value = $replaceValue
$item.Editing.EndEdit()
Publish-Item -item $item -PublishMode Smart
$info = [PSCustomObject]@{
"ID"=$item.ID
"PageName"=$item.Name
"TemplateName"=$item.TemplateName
"FieldName"=$field.Name
"Replacement"=$replacement
}
[void]$list.Add($info)
}
答案
试试Regex:(?<=oursite.org/)(?:en/)?News-and-Articles(?=/)
替换为news-and-articles
另一答案
原谅我,如果我错过了什么,但在我看来,你真正想要实现的是摆脱/en
部分,最后将整个网址转换为小写。
给出您的示例网址,这可能很简单:
$url = 'https://www.oursite.org/en/News-and-Articles/2017/11/article-name'
$replaceValue = ($url -replace '/en/', '/').ToLower()
结果:
https://www.oursite.org/news-and-articles/2017/11/article-name
如果它涉及更复杂的替换,那么请编辑您的问题,并给我们更多的例子和所需的输出。
以上是关于用powershell中的regex替换子字符串的主要内容,如果未能解决你的问题,请参考以下文章