2 回答
TA贡献1757条经验 获得超7个赞
由于您已经在使用该regex
模块(支持变量后视),因此您也可以轻松使用\G
and :\K
(?:^crt|\G(?!\A))(?:(?!^$)\D)*\K[.:\d]+
TA贡献1873条经验 获得超9个赞
分解来看,这假设了几件事:
(?:
^crt # start a line with crt
| # or
\G(?!\A) # start after thre previous match (unless it is the very start of the string)
)
(?:(?!^$)\D)*\K # match any non-digit character, but stop at empty lines
[.:\d]+ # character class with ., : and digits
在Python代码中可以是:
import regex as re
junk = """
crt - 00:00:00 up 200 days, 23:35, 0 users, load average: 0.04, 0.05, 0.02
Tasks: 300 total, 2 running, 298 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.0%us, 2.5%sy, 0.0%ni, 89.2%id, 0.0%hi, 0.1%si, 0.0%st
Mem: 123456K total, 1234567k used, 989991k free, 11156793k buffers
Swap: 456K total, 30897564k used, 785431k free, 23445897k cached
PID User Pr NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
24 455 36 63 700 800 900 456 87 35 46
2 root 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 thread
crt - 00:00:04 up 200 days, 23:39, 0 users, load average: 0.04, 0.05, 0.02
Tasks: 300 total, 2 running, 298 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.0%us, 2.5%sy, 0.0%ni, 89.2%id, 0.0%hi, 0.1%si, 0.0%st
Mem: 123456K total, 1234567k used, 989991k free, 11156793k buffers
Swap: 456K total, 30897564k used, 785431k free, 23445897k cached
"""
rx = re.compile(r'(?:^crt|\G(?!\A))(?:(?!^$)\D)*\K[.:\d]+', re.M)
for match in rx.finditer(junk):
print(match.group(0))
产量(缩写):
00:00:00
200
23:35
...
添加回答
举报