我正在 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###
如果最后一行只包含行尾字符,则此方法无效。