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

Python拆分路由器API动态格式时间字符串的优雅方案求助

优雅拆分动态长度的时间字符串(如"4d12h33m59s")

嘿,这个需求我之前做路由器相关开发时也碰到过,这种紧凑的时间格式确实需要灵活的解析方式。下面我给你两种实用又优雅的实现思路,不管是追求简洁高效还是自定义可控性都能满足。

方案一:正则表达式(最简洁高效)

正则是处理这种模式匹配的绝佳工具,我们可以用一个匹配数字+时间单位的正则表达式,一次性提取所有时间片段。

核心正则规则

(\d+[ywdhms])
  • \d+:匹配一个或多个连续数字
  • [ywdhms]:精准匹配时间单位(年y、周w、天d、小时h、分钟m、秒s)

代码示例(Python)

import re

def split_time_string(time_str):
    # 定义匹配规则
    pattern = r'(\d+[ywdhms])'
    # 提取所有符合规则的片段
    return re.findall(pattern, time_str)

# 测试所有示例格式
test_cases = [
    "4d12h33m59s",
    "12h33m59s",
    "12y14w4d12h33m59s",
    "12m23s",
    "33s"
]

for case in test_cases:
    print(f"输入: {case} → 输出: {split_time_string(case)}")

运行结果

输入: 4d12h33m59s → 输出: ['4d', '12h', '33m', '59s']
输入: 12h33m59s → 输出: ['12h', '33m', '59s']
输入: 12y14w4d12h33m59s → 输出: ['12y', '14w', '4d', '12h', '33m', '59s']
输入: 12m23s → 输出: ['12m', '23s']
输入: 33s → 输出: ['33s']

这个方案的优点是代码量极少,自动适配所有包含指定单位的时间字符串,不管顺序和长度如何变化,都能准确拆分。

方案二:手动遍历解析(更可控)

如果你不想依赖正则,或者需要对解析过程做更多自定义处理(比如验证单位合法性、处理非法输入),可以手动遍历字符串来拆分:

代码示例(Python)

def split_time_string_manual(time_str):
    # 定义合法的时间单位集合
    valid_units = {'y', 'w', 'd', 'h', 'm', 's'}
    result = []
    current_num = []
    
    for char in time_str:
        if char.isdigit():
            # 收集连续的数字字符
            current_num.append(char)
        elif char in valid_units:
            # 遇到合法单位时,拼接数字和单位并加入结果
            if current_num:
                result.append(''.join(current_num) + char)
                current_num = []
        else:
            # 遇到非法字符时可自定义处理,这里直接抛出异常
            raise ValueError(f"时间格式包含非法字符:{char}")
    
    # 检查是否有未匹配单位的残留数字
    if current_num:
        raise ValueError(f"无效的时间格式:{time_str},结尾存在无单位的数字")
    
    return result

# 测试同样的用例
for case in test_cases:
    print(f"输入: {case} → 输出: {split_time_string_manual(case)}")

这个方案的好处是你可以完全控制每一步,比如添加单位校验、处理非法输入等,适合对鲁棒性要求更高的场景。

额外小提示

  • 如果需要进一步将片段转换成数值(比如把"4d"转换成数字4),可以在拆分后遍历处理:int(item[:-1])提取数字,item[-1]获取单位。
  • 如果API返回的单位有大小写变种(比如Y/W),可以在正则里改成[yYwWdDhHmMsS],或者手动解析时先统一转成小写/大写再判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:16:10