re正則在python中的簡單實用

python:2.7.3

platform:windows


最近公司需要做個分析,從冗長的錯誤日誌中分析並且分離出同類的錯誤然後分別提交.

於是第一次接觸python.然後就喜歡上了...


日誌大概長這樣.

20160101-190115[I]: [Lua]Role:19125 [ClientErrorMsg] [string "src/ui/office/KUIOfficeMainLayer.luac"]:0: attempt to index field '_mainLayout' (a nil value)  [C]:129
stack:
	[string "src/main.luac"]: in function '__index'
	[string "src/ui/office/KUIOfficeMainLayer.luac"]: in function ''
	[string "src/ui/office/KUIOfficeMainLayer.luac"]: in main chunk
	[string "src/logic/KEventDispatchCenter.luac"]: in function 'dispatchEvent'
	[string "src/logic/KPlayer.luac"]: in main chunk
	[C]: in function 'xpcall'
	[string "src/network/KGameServer_v2.luac"]: in main chunk
	[string "src/network/KGameServer_v2.luac"]: in function 'OnRecvPackage'
20160101-101537[I]: [Lua]Role:13603 [ClientErrorMsg] [string "lib/string.luac"]:0: assertion failed!  [C]:29
stack:
	[string "src/main.luac"]: in main chunk
	[C]: in function 'assert'
	[string "lib/string.luac"]: in function 'split'
	[string "src/ui/guide/KUIGuideDialogueNode.luac"]: in function 'refreshDialogue'
	[string "src/ui/guide/KUIGuideDialogueNode.luac"]: in main chunk
	[string "src/ui/guide/KUIGuideDialogueNode.luac"]: in function 'refreshUI'
	[string "src/ui/uibase/KUINodeBase.luac"]: in function 'autoHandler'
	[string "src/ui/uibase/KUINodeBase.luac"]: in function 'init'
	[string "src/ui/g
20160101-160554[I]: [Lua]Role:17096 [ClientErrorMsg] [string "src/ui/office/factory/KUIFactoryGearMultiChoo..."]:0: attempt to index global 'scrollControl' (a nil value)  [C]:26
stack:
	[string "src/main.luac"]: in function '__index'
	[string "src/ui/office/factory/KUIFactoryGearMultiChoo..."]: in main chunk
	[string "src/logic/KEventDispatchCenter.luac"]: in function 'dispatchEvent'
	[string "src/logic/KPlayer.luac"]: in main chunk
	[C]: in function 'xpcall'
	[string "src/network/KGameServer_v2.luac"]: in main chunk
	[string "src/network/KGameServer_v2.luac"]: in function 'OnRecvPackage'
	[string "lib/tcp_client_v2.luac"]: in main chunk

觀察了一陣子覺得首先應該把他們截斷.於是正則就派上用場了.

由於反斜槓會引起排版錯誤。就貼圖了。


通過這個去篩選分割.可以分割所有類似上文中類似20160101-160554[I]的字符串並且分別存儲到values和devides中後面再去二次分析.


之後做工具的時候又遇見一個需求.

要實現正則查找一個字符串.該字符串是符合某個規則的字符串的子字符串.

一開始不知道有分組這一回事.只能分次去查找.

譬如

 <Size X="1280.0000" Y="720.0000" />
                <PrePosition X="0.0000" Y="0.0000" />
                <PreSize X="0.0000" Y="0.0000" />
                <FileData Type="Normal" Path="ui_material/battle/zd_background.png" />
在類似的字符串中查找ui_material/battle/zd_background.png這個子字符串.

如果不使用分組的話.我必須先這樣re.search(r'<FileData.*>', str).去定位到那一行.再在結果中二次查找.

後來問了我師傅他告訴我有分組這一回事..於是乎事情就簡單了..

re.search(r'Path=\"(.*)\" />', str)

完美解決...


未完待續..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章