我有一个脚本,它从路径位置读取文件名,然后他只获取这些数字,并对它们做一些事情。在我遇到这种情况之前,一切都很顺利。
举个例子:
对于文件名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
复制相似问题