2016年5月22日 星期日

[Python]Python中的re(Regular expression)模組的應用


6.2. re — Regular expression operations


2021.03.17 : 針對封包byte執行切割 在re中必須密切注意加上關鍵字 b"[\s\S]
import re

aaa = [b'']
data = b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00'
aaa = re.findall(b"[\s\S]{1500}", data) #就是这里需要做小小的改造,看仔细哦
aaa.append(data[(len(aaa) * 1500):])
print("ret:", aaa)

print(str(len(aaa)))

用RE模組作純數的辨別
re.findall 範例
以數字0-9為例,在下面範例中我們傳入function的command為 :  
import re
secs = ""
command = "wait(20)" # 等20秒
matchPattern = re.findall("[0-9]", command) #matchPattern = ['2','0']
for i in range(len(matchPattern)): #用for 迴圈去 for       
matchPattern這個list並轉換為字串
        secs += matchPattern[i]
        time.sleep(int(secs)) #轉換為int 並丟到 time.sleep()裡面做 睡20秒



用RE模組作浮點(含小數點)的辨別

以下範例的變化型是用於小數點的辨別
假設我們讀取xml的command是 waitSec(2.5)
要做的是等2.5秒 那麼如何把2跟5中間的小數點辨別進來呢???
如果用上述的範例 沒辦法辨識到小數點,因此需要下述的範例 :
elif ("waitSec" in test_func):
    message = " enter WAIT group and do : " + test_func
    slog.print_and_save_test_Log(key, message)
    secs = ""    matchPattern = re.findall("[-+]?\d*\.\d+|\d+", test_func)
    for i in range(len(matchPattern)):
        secs += matchPattern[i]
    time.sleep(float(secs))
    message = " leave sleep : WAIT."    slog.print_and_save_test_Log(key, message)

 



沒有留言:

張貼留言