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

Blu*_*luz 3 regex string powershell comma export-to-csv

在以下字符串中,

apache:x:48:48:Apache:/var/www:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

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

apache,x:48:48:Apache:/var/www:/sbin/nologin
Run Code Online (Sandbox Code Playgroud)

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

Ans*_*ers 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
Run Code Online (Sandbox Code Playgroud)

Regexp细分:

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

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

进一步说明:

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