bash中如何实现过滤15分钟及以内时长字符串的条件判断逻辑
实现思路
直接将所有时长字符串统一转换为秒级数值,和15分钟对应的900秒做对比,逻辑清晰且扩展性强,避免原写法的逻辑漏洞(原if 's' or 'm' not in 'string'判断逻辑存在运算符优先级错误,永远返回真,无法正常工作)。
- 预设单位到秒的映射规则:
s=1秒、m=60秒、h=3600秒、d=86400秒 - 拆分时长字符串的数字部分和单位部分
- 计算总秒数后和阈值对比即可
代码示例(Python)
基础实现
def duration_to_sec(dur_str): unit_map = {'s':1, 'm':60, 'h':3600, 'd':86400} num = int(''.join(filter(str.isdigit, dur_str))) unit = ''.join(filter(str.isalpha, dur_str)).lower() return num * unit_map[unit] # 业务判断逻辑 if duration_to_sec(你的时长字符串) >= 900: break # 低于15分钟的后续执行逻辑
带异常兼容的严谨实现
用正则匹配解析,避免非法输入导致报错:
import re def duration_to_sec(dur_str): unit_map = {'s':1, 'm':60, 'h':3600, 'd':86400} # 严格匹配数字+单位的格式 match = re.fullmatch(r'(\d+)([smhd])', dur_str.strip().lower()) if not match: # 非法输入默认按超过阈值处理,可根据需求调整 return 9999 num = int(match.group(1)) unit = match.group(2) return num * unit_map[unit] if duration_to_sec(你的时长字符串) >= 900: break
内容的提问来源于stack exchange,提问作者solarflare
相关产品推荐
相关产品推荐

