2013-10-28 34 views
3

我需要一種方法通過正則表達式來優化,這裏是我一起工作的字符串:Python的正則表達式 - 更快的搜索

rr='JA=3262SGF432643;KL=ASDF43TQ;ME=FQEWF43344;JA=4355FF;PE=FDSDFHSDF;EB=SFGDASDSD;JA=THISONE;IH=42DFG43;' 

,我想只需要JA=4355FF這是JA=THISONE之前,所以我做了這個方法:

aa='.*JA=([^.]*)JA=THISONE[^.]*' 
aa=re.compile(aa) 
print (re.findall(aa,rr)) 

,我也得到:

['4355FF;PE=FDSDFHSDF;EB=SFGDASDSD;'] 

我的第一個問題是慢搜索的字符串的一部分propriete(becouse我要搜索的字符串是太大,通常JA=THISONE是字符串的結尾)

而第二個問題是我不明白4355FF但所有的字符,直到JA=THISONE

有人可以幫助我優化我的正則表達式嗎?謝謝!

回答

3

一,請考慮使用字符串搜索,而不是正則表達式的:

thisone_pos = rr.find('JA=THISONE') 
range_start = rr.rfind("JA=", 0, thisone_pos) + 3 
range_end = rr.find(';', range_start) 
print rr[range_start:range_end] 

II。考慮翻轉字符串和反向構建您正則表達式:

re.findall(pattern, rr[::-1]) 
+0

你可以給我解決這個例子中使用字符串搜索,關鍵是這裏對我來說,我只需要JA ='4355FF'這是JA = THISONE之前 – Jovan

+0

@Jovan添加了示例 – orip

1

你可以考慮以下解決方案:

import re 

rr='JA=3262SGF432643;KL=ASDF43TQ;ME=FQEWF43344;JA=4355FF;PE=FDSDFHSDF;EB=SFGDASDSD;JA=THISONE;IH=42DFG43;' 

m = re.findall(r"(JA=[^;]+;)", rr) 

# Print all hits 
print m 

# Print the hit preceding "JA=THISONE;" 
print m[ m.index("JA=THISONE;") - 1] 

首先,你看開頭的所有實例「JA」;然後,選擇位於「JA = THISONE;」之前的最後一個實例。