在以下字符串中,
apache:x:48:48:Apache:/var/www:/sbin/nologin
我怎么能用逗号替换第一个冒号(只有这个冒号),所以我会得到以下字符串?
apache,x:48:48:Apache:/var/www:/sbin/nologin
此外,代码必须支持具有多行的文件,并仅替换每行中的第一个逗号。
答案 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
{}
}