我想制定一個正則表達式能夠匹配任何特定的模式。然後,正則表達式將繼續查找其他模式直到字符串結束,但在某些情況下,模式不會出現,匹配將失敗。現在,我被困在:Python的正則表達式:如何匹配任何特定的字符串,並避免回溯失敗時
.*?PATTERN
的問題是,在該字符串不存在的情況下,這需要太多的時間,由於回溯法。爲了縮短這個,我試圖模仿使用正向前查找原子團在此線程解釋(順便說一句,我使用的python-2.7 re模塊): Do Python regular expressions have an equivalent to Ruby's atomic grouping?
所以我寫了:
(?=(?P<aux1>.*?))(?P=aux1)PATTERN
當然,當STRING不存在時這比以前的版本更快,但麻煩是,它不再與STRING相匹配。將everyhing與字符串的末尾匹配,並且之前的狀態在lookahead之後被丟棄。
所以問題是,有沒有辦法像.*?STRING
這樣的比賽,並且當比賽不存在時能夠更快地失敗?
正則表達式中的STRING是哪裏?我不能完全按照你的例子。 –
你好。我正在尋找的模式是「src =」,我需要。*?之前因爲可能有幾個變量字段,我想忽略:^(?:(?:\ d {4} - \ d {2} - \ d {2} \ s + \ d \ d:\ d \ d :\ d \ d)|(?:?\ W {3} \ S + \ d {1,2} \ S \ d \ d:\ d \ d:\ d \ d))\ S + ID =(P S +)s + sn =(?P \ S +)\ s + time = \「(?P \ d {4} - \ d {2} - \ d {2} \ s + \ d {2 }(?:: \ s +)\ d {2}(?:: | \ s +)\ d {2} [^「] *)\」\ s + fw =(?P \ S + pri =(?P \ d)\ s +(?:\ S + \ s +)m =(?P \ d +)\ s +。*?src =(?P [^:\ s] +)(?: :(?P [^:\ s] *)\ S *)?\ s + dst =(?P [^:\ s] +)(?: :(?P [^:\ s] * )\ S *)?\ s + proto =(?P [^ /] +)。*?Category = \「(?P [^ \」] +)。* $ –
Ilopez
這是一種線我正在解析: May 18 12:47:21 id = firewall sn = XXXXXXX time =「2012-05-18 19:47:42 UTC」fw = xxx.xxx.xxx。 xxx pri = 6 c = 1024 m = 97 n = 696201 src = xxx.xxx.xxx.xxx:xxxx:X0:xxxxxxxx dst = xxx.xxx.xxx.xxx:80:X2:xxxxxx.com proto = tcp/http op = GET sent = 1274 rcvd = 8355 result = 0 dstname = www.xxxx.com arg = xxxxxxxxxxxxx appcat =「xxxxx」appid = xxx code = 31 Category:「Web Communications」 – Ilopez