我将尽可能清楚地说明我的问题。我可能在这里遗漏了一些非常明显的东西,但我只是不知道如何找到解决方案…
我有一个字符串,我想替换前两次出现的":"与"/":
字符串:
$string = 2020:10:07 08:45:49
所需的字符串:
2020/10/07 08:45:49
我已经尝试使用.Replace
如下所示:
$string = $string.Replace([regex]":","/",2)
但是我每次都得到这个错误:
Cannot find an overload for "replace" and the argument count: "3".
我以前见过别人这样使用.Replace
,所以我不确定我的用法有什么不同。有人能给我指个方向吗?
PowerShell是基于。net的语言。String
没有重载方法Replace
,但Python的字符串有。net中的count
参数。
你可以这样写:
$string = '2020:10:07 08:45:49'
#Replace 2+ spaces you have in source with single space
$string = $string -replace 's+', ' '
# Variant 0 - Best - ALWAYS use proper types. There is DateTime type to use for Dates and Times!
#Exact parse by format to DateTime object
$dt = [DateTime]::ParseExact($string, 'yyyy:MM:dd hh:mm:ss', [System.Globalization.CultureInfo]::InvariantCulture)
#Convert DateTime to String
$result = $dt.ToString('yyyy/MM/dd hh:mm:ss')
。Net的String.Split
有可选参数count
,这意味着拆分不超过# pieces。你可以这样写:
# Variant1
$result = [string]::Join('/',$string.Split(':', 3))
# Variant2
$result = $string.Split(':', 3) -join '/'
String.Replace()
不支持regex模式,也不接受最大计数。
使用-replace
regex运算符代替:
$string = '2020:10:07 08:45:49'
$string -replace '(?<=^[^:]*):(.*?):','/$1/'
这将只用/
替换:
的第一次和第二次出现
特别是对于日期/时间表示,您可能希望这样解析它,此时您可以轻松地重新格式化它:
$string = '2020:10:07 08:45:49'
$datetime = [datetime]::ParseExact($string, "yyyy:MM:dd HH:mm:ss", $null)
# Now we can create a new string with the desired format
Get-Date $datetime -Format 'yyyy/MM/dd HH:mm:ss'
# This might be easier than figuring out regex patterns
'{0:dd/MMM/yyyy-HH.mm.ss}' -f $datetime