我想从字符串中搜索具有特定格式的数字,并使用powershell将最后一个数字增加1。该字符串取自大型txt文件。
示例:
$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"
我想将测试版增加1(2.0.0200
==> 2.0.0201
),
运行powershell命令后:
$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104"
答案 0 :(得分:0)
嗯,答案很大程度上取决于您的示例对其余实际数据的代表性,但对于您给出的示例:
$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"
$str -match ('^(.+), (Beta = )(.+),(.+)$')
$ver = $matches[3].split('.')
$ver[2] = '{0:0000}' -f ([int]$ver[2] + 1)
$newVerStr = $ver -join '.'
$newStr = '{0}, {1}{2},{3}' -f $matches[1], $matches[2], $newVerStr, $matches[4]
$newStr
答案 1 :(得分:0)
这有点笨重,但似乎有效:
$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104"
if($str -match "(?<=Beta = \d+\.\d+\.)(?<bv>\d+)")
{
$str -replace "(?<=Beta = \d+\.\d+\.)(\d+)", ("{0:0000}" -f (([int]::Parse($matches.bv)+1)))
}
可能有一种方法可以让它在-Replace
的一行中工作,但暂时还没有我这样做。
答案 2 :(得分:0)
使用替换System.Text.RegularExpressions.Regex的方法的代码片段:
$str = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200, Prod 3.4.0104"
[regex]::Replace($str, '(?<Head>.+\.)(?<Beta>\d+)(?<Tail>,[^,]+)$',
{ param( [System.Text.RegularExpressions.Match]$m )
$bv = 1 + $m.Groups['Beta'].Value
'{0}{1:0000}{2}' -f $m.Groups['Head'].Value,$bv,$m.Groups['Tail'].Value
}
)
输出:
Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0201, Prod 3.4.0104
答案 3 :(得分:0)
您可以利用PowerShell中的version
类型。以下将输出增加的beta版本字符串。
$originalString = "Android version 4.4.2, Alfa = 1.2.0400, Beta = 2.0.0200,
Prod 3.4.0104"
$parsedString = $originalString.Split(' ')
$betaVersionStr = $parsedString[8].TrimEnd(',')
$betaVersion = [version]$betaVersionStr
# you can always condense those lines above if you want
# $betaVersion = [version]$originalString.Split(' ')[8].TrimEnd(',')
"{0}.{1}.{2:d4}" -f $betaVersion.Major, $betaVersion.Minor, ($betaVersion.Build + 1)