选择两个字符之间的所有反斜杠

时间:2017-07-24 09:20:56

标签: regex powershell

我正在开发一个powershell脚本,我有几个文本文件,我需要在符合此模式的行中替换反斜杠:.. >\\%name% .. < ....可以是任何东西)

反斜杠匹配的其中一个文件的示例字符串:

<Tag>\\%name%\TST$\Program\1.0\000\Program.msi</Tag>

反斜杠不应匹配的其中一个文件的示例字符串:

<Tag>/i /L*V "%TST%\filename.log" /quiet /norestart</Tag>

到目前为止,我已设法使用此表达式Regex101选择>\\%name%<之间的每个字符: (?<=>\\\\%name%)(.*)(?=<) 但我没有选择反斜杠。

有没有找不到的解决方案?

2 个答案:

答案 0 :(得分:2)

我建议您使用XPath expression选择相关标签,然后在所选节点的文本正文中进行替换。

$xml.SelectNodes('//Tag[substring(., 1, 8) = "\\%name%"]' | ForEach-Object {
    $_.'#text' = $_.'#text' -replace '\\', '\\'
}

答案 1 :(得分:0)

所以这是我的解决方案:

$original_file = $Filepath
$destination_file =  $Filepath + ".new"

Get-Content -Path $original_file | ForEach-Object { 
    $line = $_
    if ($line -match '(?<=>\\\\%name%)(.*)(?=<)'){
       $line = $line -replace '\\','/'
     }
    $line
} | Set-Content -Path $destination_file
Remove-Item $original_file
Rename-Item $destination_file.ToString() $original_file.ToString()

因此,对于给定模式中的/,这将replace每个\,但不是我的问题的方式。