RegEx в Powershell, чтобы заменить пространство в имени элемента XML подчеркиванием - PullRequest
1 голос
/ 07 января 2012

У меня есть документ XML с именами элементов с пробелом или несколькими пробелами в нем (что недопустимо в XML), и я ищу регулярное выражение для замены пробела на _, а после изменений заменим _ на пробелснова.Регулярное выражение может быть применено к строке.

Упрощенный пример XML, где я хочу заменить <User Blob> to <User_Blob>, но я не хочу заменять, например, My Space на My_Space.Поэтому RegEx должен соответствовать <, за которым следует одно или несколько слов с пробелом, а затем>, я думаю.

<User Data Blob> 
    <Item> 
        <Key>SomeKey</Key> 
        <Value>false</Value> 
    </Item> 
    <Item> 
        <Key>AnotherKey</Key> 
        <Value></Value> 
    </Item> 
</User Data Blob> 

Ответы [ 3 ]

2 голосов
/ 07 января 2012
Get-Content .\file.xml | Foreach-Object {
    [regex]::replace($_,'<([^>]+)>',{$args[0] -replace ' ','_'})
}
1 голос
/ 07 января 2012

из космоса в знак подчеркивания:

(gc .\FileWithSpace.xml)| % { $_ -replace "<(/?)(\w+) (\w+)>", '<$1$2_$3>'} 

Из Подчеркивания в Космос:

(gc .\FileWithUnderscore.xml)| % { $_ -replace "<(/?)(\w+)_(\w+)>", '<$1$2 $3>'}
0 голосов
/ 07 января 2012

Если используемый regex-фреймворк поддерживает lookahead, вы можете сделать что-то вроде:

 (?=[<>]*>)

(Обратите внимание на пространство впереди.) Заменить на _.

Для обратного сделать:

_(?=[<>]*>)

Заменяется пробелом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...