我对powershell和正则表达非常新。我想使用powershell和正则表达式进行更新,如下所示:
我有以下模式的文字。
<Music href="6000111.genre" title="AAA">
<Music format="ditamap" href="000760.rock" title="222"/>
<Music format="ditamap" href="Z000756.rock" title="333"/>
</Music>
我需要在扩展名.rock(如果Z已经不存在)中添加带有href的前缀'Z'。那就是href =“000760.rock - &gt; href =”Z000760.rock
<Music href="6000111.genre" title="AAA">
<Music format="ditamap" href="X000760.rock" title="222"/>
<Music format="ditamap" href="X000756.rock" title="333"/>
</Music>
我应该得到以下结果:
真的很感谢你的帮助。 问候,rnv
答案 0 :(得分:2)
我仍然不清楚输入文件中的确切内容(就现有前缀而言),并且您确实想要处理这些内容。
以下是我对样本解决方案的最佳猜测:
@'
<Music href="6000111.genre" title="AAA">
<Music format="ditamap" href="000760.rock" title="222"/>
<Music format="ditamap" href="Z000756.rock" title="333"/>
</Music>
'@ | set-content testfile.txt
filter Set-XRock { $_ -replace '(.+href=")[a-z]?(\d+\.rock".+)','$1X$2' }
get-content testfile.txt | Set-XRock | Set-Content newfile.txt
get-content newfile.txt
<Music href="6000111.genre" title="AAA">
<Music format="ditamap" href="X000760.rock" title="222"/>
<Music format="ditamap" href="X000756.rock" title="333"/>
</Music>
您也可以使用环视正则表达式,但是为了替换/插入字符串的中间,我通常会发现它可以使更直观的代码捕获替换/插入点前后的文本,并使用反向引用来重建字符串在中间替换/插入文本。
答案 1 :(得分:0)
在UltraEdit中,我正在执行以下RegEx(Perl)
find:href = [&#34;] X?([^&#34;] *)。ditamap [&#34;] 替换:href =&#34; X \ 1.ditamap&#34;
答案 2 :(得分:0)
感谢mjolinor,
这是我如何整合你的答案:
function replaceText{
get-childitem -path $mapfolder |
Where-Object {$_.extension -eq ".mus"} |
foreach-object {
echo " Replace dita map maprev: $_"
(Get-Content $mapfolder\$_) |
Foreach-Object {
$_ -replace '(.+href=")[a-z]?(\d+\.rock".+)','$1X$2'} |
Out-File $mapfolder\$_
}
}