regex - 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,因为它看起来更容易(这就是我的正则表达式避免标签内的数字的原因)。感谢您的任何建议。
解决方案
推荐阅读
- r - 为什么要使用所有核心解决?
- django - 如何使用 select_related 优化这里的查询?
- r - 如何创建具有字符值和数值的直方图?
- python - Django过滤问题
- java - 如何在三个类之间使用 setter 和 getter 传递值
- python - 带有所有依赖项的 Pandas 安装
- javascript - 是否可以在浏览器中使用 Javascript 读取请求标头?
- bash - 在文件夹中使用随机文件?
- mysql - 在mysql查询中插入带有循环的行
- python-3.x - 什么时候应该使用 BytesIO .getvalue() 而不是 .getbuffer()?