我需要根据名称/文件夹字符串中的任何位置的日期重命名文件和文件夹,前/中/后。
日期格式可以是:
- 年月日
- 年-月-日
- 年月日
- 年-月-日
- 年-月-日
- YYYY-M-D
- YYYY-MM-D
- 年-月-日
和日期内分隔符可以是这3个字符中的任意一个
- (破折号)
- _(下划线)
- .(句号)
我原以为下面的匹配字符串(由ChatGPT提供)可以做到这一点,但没有。只有当日期位于字符串的开头时才匹配。
$fileName = "Youghusband Friends 2012-12-14 003.jpg"
if ($fileName -match '^(\d{1,2}|\d{2})[-_.](\d{1,2}|\d{2})[-_.](\d{4})(.*)$') {
$matchedPart = $matches[0]
Write-Host "FILE_MATCH_C (c) ALL: '$fileName' Matched Part: '$matchedPart' matches[1..3]='$matches[1..3]'"
} elseif ($fileName -match '^(\d{4})[-_.](\d{1,2}|\d{2})[-_.](\d{1,2}|\d{2})(.*)$') {
$matchedPart = $matches[0]
Write-Host "FILE_MATCH_D (d) ALL: '$fileName' Matched Part: '$matchedPart' matches[1..3]='$matches[1..3]'"
} else {
Write-Host "FILE_NO_MATCH: '$fileName'"
}
结果:
FILE_NO_MATCH: 'Youghusband Friends 2012-12-14 003.jpg'
什么匹配字符串可以修复它?(为什么)
谢谢
1条答案
按热度按时间7kqas0il1#
正则表达式的明显问题是使用
^
(行的开始)和$
(行的结束),而不是使用单词边界(\b
)。以下是如何使用单个正则表达式处理代码:有关正则表达式的详细信息,请参见https://regex101.com/r/R0EkUj/1。