Powershell Regex \d{n} 混淆

Powershell Regex \d{n} 混淆

我正在 Powershell 中摆弄简单的正则表达式过滤,似乎无法让数字 \d 表达式正常工作。我有一个测试目录,其中包含多个文件,使用 2 个命名约定 - “AA### 和 AA####”。有些有 3 位数字,有些有 4 位数字。我希望能够搜索以“AA”开头但尾随 3 位数字的任何内容。以下是命令:

get-childitem -Path "$HOME\documents\Test Directory" | where {$_.Name -match "AA\d{3}"}

根据 Microsoft 的文档,{n} 量词将“精确匹配 n 次”,但我的问题是它搜索至少 {3} 位数字,甚至更多,因此它会显示“AA”后有 3 位以上数字的文件。当我指定文件扩展名“AA\d{3}.txt”时,它可以正常工作,但我希望它在用户不知道文件扩展名时也能正常工作 - 允许他们搜索具有指定命名约定的任何文件。

是否有其他方法可以明确指定不超过 3 作为数字量词?

答案1

你的假设是正确的

AA\d{3}

应精确匹配 后的三位数字AA
在 RegEx 中,没有其他方式可以表达这一点。

如果匹配的数字超过三位,这可能是由于匹配的表达式在该表达式之后没有结束。
所以

AA123

将会匹配。并且

AA1234 

也会匹配,因为它匹配AA123,而字符串的其余部分将被忽略。因此,唯一匹配的可能性AA123可能是

AA\d{3}$

匹配$行尾。
但也有其他可能性:
例如,你可以在非数字像那样:

AA\d{3}[^\d]

答案2

您的正则表达式应该看起来像\d(3)[^\d],因为 3 位数字后的第四个字符不是数字。

AA###如果最后一行只包含行尾字符,则此方法无效。

相关内容