如何替换连续的特殊字符?

时间:2018-07-22 14:20:03

标签: powershell

在PowerShell中尝试替换时

"Columnname1||colunnname2||kjhsadjhj|kjsad" -replace "[||]", "','" 

以上命令正在执行

"Columnname1','','colunnname2','','kjhsadjhj','kjsad"

但是我想替换如下的完全匹配项

"Columnname1','colunnname2','kjhsadjhj|kjsad"

3 个答案:

答案 0 :(得分:3)

您的代码无法满足您的要求,因为您的搜索模式定义了character class。即使您多次指定一个字符,正则表达式中的方括号也将完全匹配任何一个包含的字符。 [||]将因此匹配一个|个字符。

由于您显然实际上实际上不想使用正则表达式匹配,因此建议您通过Replace()方法进行普通字符串替换,而不是通过-replace运算符进行正则表达式替换:< / p>

"Columnname1||colunnname2||kjhsadjhj|kjsad".Replace('||', "','")

如果您要坚持使用正则表达式替换,则必须指定两个文字|字符,或者按照PetSerAl的建议通过转义字符来指定

"Columnname1||colunnname2||kjhsadjhj|kjsad" -replace '\|\|', "','"

或通过将它们每个都放在自己的角色类中

"Columnname1||colunnname2||kjhsadjhj|kjsad" -replace '[|][|]', "','"

答案 1 :(得分:1)

正则表达式模式[||]表示“ {{1}中的1个或|中的一个”

将其更改为|以匹配两个连续的管道:

\|{2}

答案 2 :(得分:0)

以防万一您的最终结果应该是:

'Columnname1','colunnname2','kjhsadjhj|kjsad'

$string = '"Columnname1||colunnname2||kjhsadjhj|kjsad"'
$string
$String = $string -replace '^"|"$',"'" -replace '\|{2}',"','"
$string

示例输出:

"Columnname1||colunnname2||kjhsadjhj|kjsad"
'Columnname1','colunnname2','kjhsadjhj|kjsad'