首页 > 解决方案 > Powershell替换文本文件中多次出现的正则表达式

问题描述

我有一个带有书索引的大文件,我需要将所有数字减去 2。每行可能有更多的数字,例如:

姓氏,名字 12, 17-33
第二,名字 75

我需要他们成为

姓氏,名字 10, 15-31
第二,名字 73

为了完成任务,我使用参考编写了这个小脚本:

`$trova = "[0-9]+(?![^<>]*>)"
(Get-Content D:\path\document.xml) |
Foreach-Object {if ($_ -match "$trova"){
$cambia= $matches[0]
$cambia-=2
$_ -replace $trova, $cambia}
} | 
Set-Content D:\path\document2.xml`

问题是我只能成功匹配每行的第一个,而不是所有替换都具有相同的数字,因此

姓, 名字 10, 10-10
秒, 名字 73

我有点卡住了。我看到了一些使用建议

Select-String $trova -input $string -AllMatches

但我看不出如何正确地使其工作,以便在进行替换之前进行数学计算。该文件是 docx 文档中的 xml(我需要保留样式),但我决定直接从 powershell 工作,而不是使用 Word.Application,因为它看起来更容易(这就是我的正则表达式避免标签内的数字的原因)。感谢您的任何建议。

标签: regexpowershellreplacematch

解决方案


推荐阅读