/ / Python regex - по-бързо търсене - python, regex

Python regex - по-бързо търсене - python, regex

Имам нужда от начин за оптимизиране от 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 за отговор № 1

I. Обмислете използването на търсене на низове вместо регулярни изрази:

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;".