从 powershell 正则表达式匹配中提取值
Extract value from powershell regex matches
作为 powershell 中构建脚本的一部分,我正在尝试使用正则表达式从字符串中提取版本号。假定数字的格式为 xx.yy(例如 10.6)我需要整数部分(在本例中为 10)和小数部分(例如:6)
我想要一种方法来检查我的模式是否存在,然后提取数字。 (我是 powershell 的新手,我尽量避免使用 C# 函数,而是使用 powershell 本身。)
我试过这样做:
$integralPart="A"
$fractionPart="B"
function GetVersion {
param([string]$strVersion)
$integralPattern="^[0-9]+(?=\.)"
$fractionalPattern="(?<=\.)[0-9]+$"
#Check if string consists of an integral and fractional part
If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
{
$strVersion -match $integralPattern
$integralPart = $matches[0]
$strVersion -match $fractionalPattern
$fractionalPart = $matches[0]
}
else
{
Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
Exit
}
}
GetVersion (Read-Host 'Enter program version')
Write-Host $integralPart
Write-Host $fractionPart
在这样做时,我希望 $integralPart 和 $fractionalPart 包含我的数字,因为它们匹配它们应该的值
谁能解释一下这是如何做到的?
您需要告诉 PS 这些变量来自 $global
:
的全局范围
$integralPart="A"
$fractionPart="B"
function GetVersion {
param([string]$strVersion)
$integralPattern="^[0-9]+(?=\.)"
$fractionalPattern="(?<=\.)[0-9]+$"
#Check if string consists of an integral and fractional part
If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
{
$strVersion -match $integralPattern
$global:integralPart = $matches[0] // SEE HERE
$strVersion -match $fractionalPattern
$global:fractionPart = $matches[0] // SEE HERE
}
else
{
Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
Exit
}
}
GetVersion "10.6"
Write-Host $integralPart
Write-Host $fractionPart
输出:
True
True
10
6
此外,您有一个错字:在 GetVersion
中,您有 $fractionalPart
而全局变量称为 $fractionPart
。
作为 powershell 中构建脚本的一部分,我正在尝试使用正则表达式从字符串中提取版本号。假定数字的格式为 xx.yy(例如 10.6)我需要整数部分(在本例中为 10)和小数部分(例如:6)
我想要一种方法来检查我的模式是否存在,然后提取数字。 (我是 powershell 的新手,我尽量避免使用 C# 函数,而是使用 powershell 本身。)
我试过这样做:
$integralPart="A"
$fractionPart="B"
function GetVersion {
param([string]$strVersion)
$integralPattern="^[0-9]+(?=\.)"
$fractionalPattern="(?<=\.)[0-9]+$"
#Check if string consists of an integral and fractional part
If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
{
$strVersion -match $integralPattern
$integralPart = $matches[0]
$strVersion -match $fractionalPattern
$fractionalPart = $matches[0]
}
else
{
Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
Exit
}
}
GetVersion (Read-Host 'Enter program version')
Write-Host $integralPart
Write-Host $fractionPart
在这样做时,我希望 $integralPart 和 $fractionalPart 包含我的数字,因为它们匹配它们应该的值
谁能解释一下这是如何做到的?
您需要告诉 PS 这些变量来自 $global
:
$integralPart="A"
$fractionPart="B"
function GetVersion {
param([string]$strVersion)
$integralPattern="^[0-9]+(?=\.)"
$fractionalPattern="(?<=\.)[0-9]+$"
#Check if string consists of an integral and fractional part
If ($strVersion -match $integralPattern -eq $True -and $strVersion -match $fractionalPattern -eq $True)
{
$strVersion -match $integralPattern
$global:integralPart = $matches[0] // SEE HERE
$strVersion -match $fractionalPattern
$global:fractionPart = $matches[0] // SEE HERE
}
else
{
Write-Host "You did not enter a double with an integer and a fractional part (eg. 10.6)"
Exit
}
}
GetVersion "10.6"
Write-Host $integralPart
Write-Host $fractionPart
输出:
True
True
10
6
此外,您有一个错字:在 GetVersion
中,您有 $fractionalPart
而全局变量称为 $fractionPart
。