替换每个单词的第一个字符而不影响内部单词

时间:2018-05-01 19:57:08

标签: regex string powershell-v3.0

我正在尝试替换PowerShell中每个关键字的第一个字符,但无法找到正确的模式以获得所需的结果。不知何故,我能够设法获得替代,但其他价值正在影响哪些作为一个价值,即" Gii-test-api.ne"转换为" Gii $ test $ api $ ne"。

例如:

我的字符串是(将-替换为$):

$values = -CertThumb 1234567 -serverCertThumb 75659600 -MaintenancePeriod 60 -apiProtocol https -Port 8973 -Uri Gii-test-api.ne

预期产出:

$CertThumb 1234567 $serverCertThumb 75659600 $MaintenancePeriod 60 $apiProtocol https $Port 8973 $Uri Gii-test-api.ne

尝试过的命令:

$values.ToString() -replace ('^*\-','$')

1 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式替换-字符仅匹配,如果之前没有单词char:

$values -replace '\B-','$'

或者,如果您只想替换前面有空格或字符串开头的-

$values -replace '(?<!\S)-','$'

此处,\B匹配word boundary以外的任何位置(即此处,-仅匹配不带字母,数字或_)和{ {1}}否定lookbehind匹配字符串中以字符串开头或以空格开头的位置。

请注意,替换可以是(?<!\S)'$'(替换中的文字'$$'将在此处作为$字符进行解析,但如果您更换使用$ +数字,您必须使用另一个$转义$

请参阅regex demo

enter image description here