Python中uptime命令输出匹配天数与分钟数的正则表达式求助
适配多种
uptime输出格式的正则表达式 先看uptime的三种典型输出格式:
15:22:04 up 45 days, 2:34, 2 users, load average: 0.94, 1.17, 1.37 15:30:12 up 21 min, 2 users, load average: 1.56, 1.18, 1.18 15:30:39 up 15:30, 1 user, load average: 0.27, 0.40, 0.48
你之前的正则只能匹配第一种带天数的格式,要覆盖所有三种情况,可使用以下正则方案:
最终正则表达式
如果需要捕获包含up的完整目标内容,用这个版本:
import re uptime_parser = re.compile(r'(up\s+(?:(?:\d+\s+\w+,\s+)?\d+(?::\d+)?|\d+\s+\w+))')
如果只需要捕获up后面的时长部分,用这个版本:
import re uptime_parser = re.compile(r'up\s+((?:\d+\s+\w+,\s+)?\d+(?::\d+)?|\d+\s+\w+)')
正则结构解析
up\s+:匹配固定的up开头,后面跟一个或多个空白字符- 核心捕获逻辑通过分支覆盖三种场景:
(?:\d+\s+\w+,\s+)?:非捕获组,匹配45 days,这类带单位的前缀,?表示该部分可选\d+(?::\d+)?:匹配纯数字(如21)或时分格式(如15:30、2:34),(?::\d+)?表示冒号加分钟的部分可选|\d+\s+\w+:单独匹配21 min这类仅带分钟单位的格式,作为分支补充
测试结果
使用包含up的正则版本,对三个示例文本匹配后,捕获结果如下:
up 45 days, 2:34up 21 minup 15:30
内容的提问来源于stack exchange,提问作者Ani
相关产品推荐
相关产品推荐

