【发布时间】:2021-11-25 00:55:57
【问题描述】:
希望有人可以帮助我。 当前字符串:
$monthlist = @()
$monthlist = Get-ChildItem $place -Recurse -Directory -force `
| Where-Object { ($_.name -match '((\\0[1-9]|1[0-2])-(200[0-9]|20[1-4][0-9]|205[0-5]))') }
这会在 Powershell 中返回:
C:\temp\test\10-2021
C:\temp\test\12-2019
C:\temp\test\2019\12-2019
C:\temp\test\2020\11-2020
但不是:
c:\temp\test\08-2021
c:\temp\test\09-2021
使用 https://regex101.com/ 和 https://regexr.com/ 他们都说上面列出的所有 6 个文件夹都应该匹配。
我需要正则表达式字符串中的\,因为还有几个文件夹,例如我不希望匹配的以下文件夹:
c:\temp\test\01-01-2021
c:\temp\test\05-25-2020
我在 RegEx 方面不是最好的,我希望有人能很快发现我的错误
【问题讨论】:
-
删除第一个嵌套组开头的
\\- 路径分隔符不是文件名本身的一部分 -
除此之外 - 不需要第二行末尾的反引号。只需将管道从第 3 行的开头移动到第 2 行的结尾。
-
@MathiasR.Jessen 如果我拉 \\ 然后正则表达式返回 10-01-2021 和 10-02-2021,我需要排除这些。
-
@topcity36 你不需要
\\,你只需要将模式锚定在字符串的开头和结尾:$_.Name -match '^((0[1-9]|1[0-2])-(200[0-9]|20[1-4][0-9]|205[0-5]))$' -
@MathiasR.Jessen sonuva....我可以发誓我以前尝试过。无论哪种方式,它都有效,感谢您的帮助。
标签: regex powershell