鉴于此字符串:
2017.12.21.5
...如何将其转换为:
2017.12.21-5
比赛将始终在.
的第3次出现。
我在PowerShell脚本中运行它。
我已经尝试了太多的排列来列出这里;到目前为止,我甚至没有接近过。
- 编辑 -
此外,第二个和第三个八位字节(月和日)将在一到两位数之间变化。第四个(当天发布)也可能包含三位数字。
没有办法定位和替换第n个字符,所以我们只需要定位整个字符串并复制未更改的部分
"2017.12.21.5" -replace '(\d{4}\.\d{2}\.\d{2})\.(\d*)', '$1-$2'
2017.12.21-5
您可以使用此正则表达式匹配第3次出现。
(?<=\.\d+\.\d+)\.
您可以使用拆分和连接
$var='2017.12.21.5'
$split=$var -split '\.'
($split[0..2] -join '.') + '-' + $split[3]
编辑:我将最后一个函数简化为此。
$InputStr = "2017.12.21.5"
$matchVal = '.'
$replaceVal='-'
$num = 3
#searched is:
$OutputStr=$InputStr
$positions = (0..($InputStr.ToCharArray().Count-2)|ForEach-Object{$InputStr.IndexOf($matchVal,$_)}|Select-Object -Unique)
if($num -lt $positions.Count+1){
$OutputStr = $InputStr.Remove($positions[$num-1],1).Insert($positions[$num-1], $replaceVal)
}
因此,它获得了$matchVal
nd中$positions
的所有位置,然后检查$num
<=位置计数。如果是这样的话,$InputStr
的$position[$num-1]
字符将被替换为$replaceVal
。