我日誌結構看起來像正則表達式如何匹配空
a b c|
因此,例如:
Mozilla 5.0 white|
亦宜/解壓縮到某事像
a: Mozilla, b: 5.0, c: white
但我的日誌中有一個條目是:
iOS |
可以作爲
a:iOS, b:null, c:null
我使用python3重,做配以命名組解釋2 P
有沒有什麼辦法來實現這一目標?
我日誌結構看起來像正則表達式如何匹配空
a b c|
因此,例如:
Mozilla 5.0 white|
亦宜/解壓縮到某事像
a: Mozilla, b: 5.0, c: white
但我的日誌中有一個條目是:
iOS |
可以作爲
a:iOS, b:null, c:null
我使用python3重,做配以命名組解釋2 P
有沒有什麼辦法來實現這一目標?
>>> m = re.match(r"(?P<a>[^\s]+)(\s+(?P<b>[^\s]+))?(\s+(?P<c>[^\s]+))?\s*\|")
>>> m.groups()
('iOS', None, None)
>>> m.groupdict()
{'c': None, 'a': 'iOS', 'b': None}
>>> m = re.match(r"(?P<a>[^\s]+)(\s+(?P<b>[^\s]+))?(\s+(?P<c>[^\s]+))?\s*\|")
>>> m.groups()
('Mozilla', ' 5.0', ' white')
>>> m.groupdict()
{'c': 'white', 'a': 'Mozilla', 'b': '5.0'}
UPDATE:
我注意到以前的版本包含在返回的羣體空間 - 我的因素\ S +入(P <> ...?),以節省一對夫婦字節,但它有這種副作用。所以我解決了這個問題,並在最後的'|'之前讓它容忍空間。
你可以把你的模式列表中的類似以下內容:
>>> pattern = ['a', 'b', 'c']
然後使用re.findall()
找到所有相關的部分,然後用zip
和dict
以創建相對詞典:
>>> s = "IOS|"
>>> dict(zip(pattern,re.findall('([^\s]+)?\s?([^\s]+)?\s?([^\s]+)?\|',s)[0]))
{'a': 'IOS', 'c': '', 'b': ''}
>>>
>>> s = "Mozilla 5.0 white|"
>>>
>>> dict(zip(pattern,re.findall('([^\s]+)?\s?([^\s]+)?\s?([^\s]+)?\|',s)[0]))
{'a': 'Mozilla', 'c': 'white', 'b': '5.0'}
「應該像[..]一樣匹配......「?!我完全困惑。你能用輸入和預期的匹配/匹配組做出一個或兩個具體的例子嗎? – timgeb
...和正在使用的正則表達式... – barny