我面臨一些不平凡的問題,我解析日誌。
我需要通過一個文件,並檢查行是否匹配模式: 如果是,那麼獲取此行中指定的ClientID。
行看起來像:
17.02.09 10:42:31.242 TRACE [1245] GDS: someText(SomeText).ClientID: '' -> '99071901'
所以我需要得到99071901.
我試圖構建正則表達式搜索模式,但它不是在「追蹤」 complete..stuck:
regex = '(^[(\d\.)]+) ([(\d\:)]+) ([\bTRACE\b]+) ([(\d)]+) ([\bGDS\b:)]+) ([\ClientID\b])'
腳本代碼:
log=open('t.log','r')
for i in log:
key=re.search(regex,i)
print(key.group()) #print string matching
for g in key:
client_id=re.seach(????,g) # find ClientIt
log.close()
欣賞如果你給我一個提示如何解決這個挑戰。
謝謝。
如果你需要這些數字,我想你只需要'r''(\ d +)'$「'正則表達式並且抓住'.group(1)'。否則,要找到其他「子匹配」,「拼出」該模式,如['^([\ d。] +)\ s +([\ d。:] +)\ s +(TRACE)\ s + \ [[\ d +)] GDS:。*?ClientID:\ s *''\ s * - > \ s *'(\ d +)'$'](https://regex101.com/r/XVRXSx/1)並訪問您需要使用適當的索引來分組。 –
Hi @WiktorStribiżew,如果要在循環中應用你的模式:regex =「^([\ d。] +)\ s +([\ d.:]+] \ s+(TRACE)\ s+\ [(\ d +)]] ?GDS:*客戶端ID:\ S * '' \ S * - > \ S * '(\ d +)' $「;我在日誌中:key = re.search(regex,i);如果密鑰不是無:ClientID = key.group(1);打印(客戶端ID); else:print('不匹配')。我沒有,沒有匹配 – AlexPes
爲什麼循環?不,只要使用'm = re.search(pat,s)','如果m:print(m.group(n))'其中'n'是組ID。參見[Python演示](https://ideone.com/B74GUk)。 –