如何替换连续的特殊字符



在PowerShell中尝试替换时

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

上面的命令正在进行

"Columnname1','','Lunname2','','kjhsadjhj','kjad">

但我想替换下面的完全匹配

"Columnname1','lunname2','kjhsadjhj|kjsad">

您的代码不能执行您想要的操作,因为您的搜索模式定义了一个字符类。即使多次指定一个字符,正则表达式中的方括号也会与任何一个包含的字符的一次匹配。因此CCD_ 1将精确地匹配一个CCD_ 2字符。

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

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

如果你想坚持使用正则表达式替换,你必须指定两个文本|字符,要么通过转义它们,就像PetSerAl建议的一样

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

或者通过将它们中的每一个放在自己的字符类中

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

正则表达式模式[||]表示"|中的1或|中的一个">

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

"Columnname1||colunnname2||kjhsadjhj|kjsad" -replace "|{2}", "','" 

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

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

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

样本输出:

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

最新更新