亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 python 的段落中使用多條件正則表達式提取數字

在 python 的段落中使用多條件正則表達式提取數字

慕后森 2023-03-08 10:16:19
我在 .txt 文件中有這段文字:crt - 00:00:00 up 200 days, 23:35, 0 users, load average: 0.04, 0.05, 0.02Tasks: 300 total, 2 running, 298 sleeping, 0 stopped, 0 zombieCpu(s): 12.0%us, 2.5%sy, 0.0%ni, 89.2%id, 0.0%hi, 0.1%si, 0.0%stMem: 123456K total, 1234567k used, 989991k free, 11156793k buffersSwap: 456K total, 30897564k used, 785431k free, 23445897k cachedPID User Pr NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND24 455  36  63  700 800 900 456 87 35 462 root 80 0 0 0 0 0 0 0 0 0 0 0 0 0 0 threadcrt - 00:00:04 up 200 days, 23:39, 0 users, load average: 0.04, 0.05, 0.02Tasks: 300 total, 2 running, 298 sleeping, 0 stopped, 0 zombieCpu(s): 12.0%us, 2.5%sy, 0.0%ni, 89.2%id, 0.0%hi, 0.1%si, 0.0%stMem: 123456K total, 1234567k used, 989991k free, 11156793k buffersSwap: 456K total, 30897564k used, 785431k free, 23445897k cached我想要所有段落中的所有數字值,crt并且不包括和cached之間的值。直到現在我正在使用這個:PIDthreadregex.findall(r'(?<!\d)(?<=\bcrt\b.*?)(?:\d{2}:\d{2}(?::\d{2})?|\d*\.?\d+)(?!\d)(?=.*\bcached\b)', text, regex.S)但這給出了所有數字,包括PID和之間thread。有任何想法嗎?
查看完整描述

2 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

由于您已經在使用該regex模塊(支持變量后視),因此您也可以輕松使用\Gand :\K

(?:^crt|\G(?!\A))(?:(?!^$)\D)*\K[.:\d]+

請參閱regex101.com 上的演示。


查看完整回答
反對 回復 2023-03-08
?
眼眸繁星

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

...


查看完整回答
反對 回復 2023-03-08
  • 2 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號