3

我需要一种通过正则表达式进行优化的方法,这是我正在使用的字符串:

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.

有人可以帮我优化我的正则表达式吗?谢谢!

4

2 回答 2

3

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]

二、考虑翻转字符串并反向构造正则表达式:

re.findall(pattern, rr[::-1])
于 2013-10-28T13:06:08.167 回答
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=THISON;”之前的最后一个实例。

于 2013-10-28T13:26:07.950 回答