Powershell中的RegEx用下划线替换XML元素名称中的空格

时间:2012-01-06 21:23:42

标签: regex powershell

我有一个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> 

3 个答案:

答案 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)

如果使用的正则表达式支持预测,您可以执行以下操作:

 (?=[<>]*>)

(注意前面的空格。)替换为_

要反向执行:

_(?=[<>]*>)

替换为空格。