我有一个XML文档,其元素名称中包含空格或多个空格(在XML中不允许),我正在寻找一个正则表达式,用_替换空格,修改后用空格替换_再次。正则表达式可以应用于字符串。
简化示例XML,我想替换<User Blob> to <User_Blob>
,但我不想将例如My Space替换为My_Space。因此RegEx需要匹配&lt;然后是一个或多个带有空格的单词,接着是&gt;我想。
<User Data Blob>
<Item>
<Key>SomeKey</Key>
<Value>false</Value>
</Item>
<Item>
<Key>AnotherKey</Key>
<Value></Value>
</Item>
</User Data Blob>
答案 0 :(得分:2)
Get-Content .\file.xml | Foreach-Object {
[regex]::replace($_,'<([^>]+)>',{$args[0] -replace ' ','_'})
}
答案 1 :(得分:1)
从太空到下划线:
(gc .\FileWithSpace.xml)| % { $_ -replace "<(/?)(\w+) (\w+)>", '<$1$2_$3>'}
从下划线到太空:
(gc .\FileWithUnderscore.xml)| % { $_ -replace "<(/?)(\w+)_(\w+)>", '<$1$2 $3>'}
答案 2 :(得分:0)
如果使用的正则表达式支持预测,您可以执行以下操作:
(?=[<>]*>)
(注意前面的空格。)替换为_
。
要反向执行:
_(?=[<>]*>)
替换为空格。