Regex 精度为2的十进制数的正则表达式

Regex 精度为2的十进制数的正则表达式,regex,powershell,decimal,Regex,Powershell,Decimal,我需要一个正则表达式,它只接受小数点到两个小数点。 我已经尝试了^\d{1,}(\.\d{2})$',但我不希望它使用可选组,因为这将允许1通过。如果取出可选组,它将不允许1.00通过 我的代码: [double]$bookPrice = read-host "Enter book price " if($bookPrice -notmatch '^\d{1,}(\.\d{2})?$'){ [console]::beep(500,300) Write-Host "

我需要一个正则表达式,它只接受小数点到两个小数点。 我已经尝试了
^\d{1,}(\.\d{2})$'
,但我不希望它使用可选组,因为这将允许
1
通过。如果取出可选组,它将不允许
1.00
通过

我的代码:

[double]$bookPrice = read-host "Enter book price "
if($bookPrice -notmatch '^\d{1,}(\.\d{2})?$'){
        [console]::beep(500,300)
        Write-Host "invalid"
}
有效期:

1.00
1.12
无效:

1
1.000000
我认为唯一能解决问题的方法是将变量
$bookPrice
更改为字符串,但我不想浪费一行时间将其转换回double。

[\d]*?[.][\d]{2}(?=[\s\W])


用python编写,但请查看:以了解发生了什么。我想它应该符合你的要求,但我在这方面也是新手

我认为你问错了问题,因为一旦你投双精度,你的正则表达式就永远不会在“1.00”上工作了

将字符串转换为
[double]$bookPrice
时,尾随的零消失。double不能存储无意义的数字。如果用户键入
1.00
$bookPrice
变量仅为“1”,如果用户键入
1.10
则仅为“1.1”--则在与双精度匹配时不会显示多余的尾随零(将双精度转换回字符串)

当然,如果您所关心的只是数字的字符串表示形式,那么您可以指定如下输出格式:
“{0:n2}”-f$bookPrice
,以确保始终有两位且只有两位小数