[英]Python regex - faster search
我需要一种通过正则表达式进行优化的方法,这是我正在使用的字符串:
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;']
我的第一个问题是慢速搜索字符串的一部分(因为我想要搜索的字符串太大而且通常JA=THISONE
在字符串的末尾)
第二个问题是我没有得到4355FF
但所有字符串直到JA=THISONE
。
有人可以帮助我优化我的正则表达式吗? 谢谢!
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])
您可以考虑以下解决方案:
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;”之前的最后一个实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.