You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell -match无法匹配任意位置日期,求正则修正方案

解决文件名任意位置日期匹配问题

问题根源

你原有的正则表达式使用了^字符串开头锚点,这会强制要求日期必须出现在文件名的最起始位置,因此无法匹配位于中间或结尾的日期。此外,原正则中(\d{1,2}|\d{2})是冗余写法,\d{1,2}已经可以匹配1位或2位数字,无需重复定义。

修正后的正则表达式

针对你需要支持的8种日期格式(核心为日-月-年和年-月-日两类,日/月可1位或2位,分隔符支持-/_/.),以下是匹配任意位置日期的正则:

1. 日-月-年格式(如 14-12-2012、4.2_2023)

\b(\d{1,2})[-_.](\d{1,2})[-_.](\d{4})\b
  • \b是单词边界,确保匹配的是独立的日期片段,避免误匹配文件名中连续数字的一部分
  • [-_.]匹配任意一种支持的分隔符
  • \d{1,2}匹配1位或2位的日/月,\d{4}匹配4位年份

2. 年-月-日格式(如 2012_12.14、2023-2-4)

\b(\d{4})[-_.](\d{1,2})[-_.](\d{1,2})\b

逻辑与上面一致,仅调整了年、月、日的顺序

修正后的PowerShell代码

$fileName = "Youghusband Friends 2012-12-14 003.jpg"
if ($fileName -match '\b(\d{1,2})[-_.](\d{1,2})[-_.](\d{4})\b') {
    $matchedDate = $matches[0]
    $day, $month, $year = $matches[1..3]
    Write-Host "匹配到日-月-年格式日期: '$fileName' 匹配部分: '$matchedDate' 日: $day, 月: $month, 年: $year"
} elseif ($fileName -match '\b(\d{4})[-_.](\d{1,2})[-_.](\d{1,2})\b') {
    $matchedDate = $matches[0]
    $year, $month, $day = $matches[1..3]
    Write-Host "匹配到年-月-日格式日期: '$fileName' 匹配部分: '$matchedDate' 年: $year, 月: $month, 日: $day"
} else {
    Write-Host "未匹配到日期: '$fileName'"
}

运行结果

匹配到年-月-日格式日期: 'Youghusband Friends 2012-12-14 003.jpg' 匹配部分: '2012-12-14' 年: 2012, 月: 12, 日: 14

内容的提问来源于stack exchange,提问作者hydra3333

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:43:10