我有一个脚本,它从路径位置读取文件名,然后他只获取这些数字,并对它们做一些事情。在我遇到这种情况之前,一切都很顺利。
举个例子:
对于文件名Patch_1348968.vip
,它使用数字1348968
。在文件名为Patch_1348968_v1.zip
的情况下,它使用错误的数字13489681
。
我用这个来取数字。一般来说,它总是以patch_#####.vip
开头,以7-8位数开头,所以我只想在任何符号(如_
或-
)之前取数字。
$PatchNumber = $file.Name -replace "[^0-9]" , ''
发布于 2022-07-18 07:31:01
您可以使用
$PatchNumber = $file.Name -replace '.*[-_](\d+).*', '$1'
见regex演示。
详细信息
.*
-除换行符以外的任何字符尽可能多[-_]
-一个-
或_
(\d+)
-第1组($1
):一个或多个数字.*
-除换行符以外的任何字符尽可能多。发布于 2022-07-18 06:59:15
我建议使用-match
,这样您就不必考虑倒置:
if( $file.Name -match '\d+' ) {
$PatchNumber = $matches[0]
}
\d+
匹配第一个连续的数字序列。自动变量$matches
包含索引0处的完全匹配,如果-match
操作符成功地将输入字符串与模式匹配。
如果希望更具体,可以使用更复杂的模式,并使用捕获组提取所需的子字符串。
if( $file.Name -match '^Patch_(\d+)' ) {
$PatchNumber = $matches[1]
}
在这里,锚点^
确保匹配从输入字符串的开头开始,然后Patch_
按字面顺序匹配(大小写不敏感),然后是一组连续的数字,这些数字被捕获()
并可以使用$matches[1]
提取。
您可以更详细地解释RegEx以及在regex101.com上实验它的能力。
https://stackoverflow.com/questions/73018063
复制相似问题