替换PowerShell中字符串中的第一个匹配字符

时间:2014-07-07 13:50:26

标签: regex string powershell export-to-csv comma

在以下字符串中,

apache:x:48:48:Apache:/var/www:/sbin/nologin

我怎么能用逗号替换第一个冒号(只有这个冒号),所以我会得到以下字符串?

apache,x:48:48:Apache:/var/www:/sbin/nologin

此外,代码必须支持具有多行的文件,并仅替换每行中的第一个逗号。

2 个答案:

答案 0 :(得分:8)

使用正则表达式:

PS C:\> $s = 'apache:x:48:48:Apache:/var/www:/sbin/nologin'
PS C:\> $s -replace '^(.*?):(.*)','$1,$2'
apache,x:48:48:Apache:/var/www:/sbin/nologin

Regexp细分:

  • ^(.*?)::字符串开头和冒号(即第一个冒号前的文本)之间的最短匹配。
  • (.*):字符串的其余部分(即第一次冒号后的所有内容)。

parantheses对子表达式进行分组,因此可以在替换字符串中将它们引用为$1$2

进一步说明:

  • ^匹配字符串的开头。
  • .*匹配任意数量的字符(.⇒任何字符,*⇒零次或多次。)
  • .*?也会这样做,但会给出最短匹配(?)而不是最长匹配。这被称为"非贪婪的比赛"。

答案 1 :(得分:0)

我使用以下方法解决从1到34的计数,但不包括数字21。

for ($i=101; $i -lt 135; $i++)
{
    if($i -ne 121)
     {$j = $i -replace '1(.*)','$1'; $j}
    Else
     {}
}