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

如何用正则表达式将PT格式时间转换为分钟数?

PT格式时间字符串转分钟数的正则校验与转换方案

问题场景

输入的PT格式字符串示例:

PT45M
PT1H
PT30M
PT
PT2H

期望输出(统一转换为分钟数):

45
60
30
0
120

需求说明:

  • 校验格式是否符合 PT<数字><H|M>,或仅为PT
  • 符合格式时:
    • 末尾为M则直接取数字作为分钟数
    • 末尾为H则将数字乘以60转为分钟数
    • 仅PT时返回0分钟
  • 格式不符合时返回0

解决方案思路

别指望单独用正则搞定所有事——正则只能帮你校验格式、提取数字和单位,乘以60这种算术活得交给代码逻辑来做。下面是具体步骤:

1. 正则匹配规则

用这个正则就能覆盖所有合法格式,还能把数字和单位单独提出来:

^PT(?:(\d+)([HM]))?$

拆解一下:

  • ^PT:必须以PT开头
  • (?:(\d+)([HM]))?:这部分是可选的(对应仅PT的情况),里面的两个捕获组分别抓数字和单位
    • (\d+):抓时间对应的数字(比如PT45M里的45)
    • ([HM]):抓时间单位(H或者M)
  • $:必须到字符串结尾,避免出现PT1Habc这种无效格式

2. 配合代码完成转换

给你两个常用语言的实现例子:

Python版本
import re

def pt_to_minutes(pt_str):
    # 用正则匹配整个字符串
    match_result = re.fullmatch(r'^PT(?:(\d+)([HM]))?$', pt_str)
    # 匹配失败直接返回0
    if not match_result:
        return 0
    num_str, unit = match_result.groups()
    # 只有PT的情况,返回0
    if not num_str:
        return 0
    # 转成整数,根据单位计算分钟数
    num = int(num_str)
    return num * 60 if unit == 'H' else num

# 测试一下示例
test_list = ["PT45M", "PT1H", "PT30M", "PT", "PT2H", "随便输个无效的"]
for item in test_list:
    print(pt_to_minutes(item))

运行后输出:

45
60
30
0
120
0
JavaScript版本
function ptToMinutes(ptStr) {
    const match = ptStr.match(/^PT(?:(\d+)([HM]))?$/);
    if (!match) return 0;
    const [, numStr, unit] = match;
    if (!numStr) return 0;
    const num = parseInt(numStr, 10);
    return unit === 'H' ? num * 60 : num;
}

// 测试用例
const testCases = ["PT45M", "PT1H", "PT30M", "PT", "PT2H", "invalid"];
testCases.forEach(item => console.log(ptToMinutes(item)));

关键说明

正则本身是用来匹配文本模式的,没有计算能力,没法直接把小时转成分钟。所以最佳路径就是正则抓数据,代码做计算,既简洁又靠谱。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:36:08