如果单词是大写字母,如何替换''by'_'?

时间:2017-01-12 17:47:09

标签: regex xml powershell parsing

我正在使用powershell将字符串解析为XML:

  

NODE IP 0.0.0.0“APXPRD”

我需要得到:

  

<NODE_IP>0.0.0.0 "APXPRD"</NODE_IP>

我尝试使用regexp,但是只有当它在所有大写字母的单词之间,任何建议时才能解决如何将''替换为'_'的问题?

我试试那个正则表达式:

$textis = 'NODE IP 0.0.0.0  "APXPRD"'
$textnew = $textis.replace('/^\s*[A-Z]+(?:\s+[A-Z]+)/m', '_')

但这似乎不起作用:/

2 个答案:

答案 0 :(得分:1)

您可以搜索:

((?:^|\s)[A-Z]+)\s([A-Z]+(?:\s|$))

并将其替换为:

$1_$2

这将查找一个大写字母([A-Z])的字符串,它直接位于空格(\s)或字符串的开头(^)之后。然后,在中间和最后之间需要一个空格,它再次匹配空格(\s)或字符串结尾($)。

如果您使用PowerShell替换它,则需要这样做(请注意:区分大小写的匹配命令creplace不仅仅是replace):

$textis = 'NODE IP 0.0.0.0 TEST String "APXPRD"'
$textnew = $textis -creplace '((?:^|\s)[A-Z]+)\s([A-Z]+(?:\s|$))','$1_$2'

答案 1 :(得分:1)

(?<=[A-Z]) (?=[A-Z])

将为您提供大写字母之间的空格。

注意中间的空间。它使用lookbehind和lookahead