Имам нужда от начин за оптимизиране от regex, тук е низът, с който работя:
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;"]
Моят първи проблем е бавно търсене apropriete част от низ (защото низ, който искам да търся е твърде голям и обикновено JA=THISONE
е в края на низ)
И вторият проблем е, че не получавам 4355FF
но всички низ до JA=THISONE
.
Може ли някой да ми помогне да оптимизирам моите regex? Благодаря ти!
Отговори:
3 за отговор № 1I. Обмислете използването на търсене на низове вместо регулярни изрази:
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])
1 за отговор № 2
Можете да разгледате следното решение:
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;".