2013-06-05 49 views
2

假设我们有一个字符串,'123A......'。我有一个其他字符串的集合,也开始于'123A......'其中A是其他字母表的字母,例如,'123AA.....''123AB.....''123ABA....'等等。Python Re,需要一个匹配列表

我想创建一个字典,其中的密钥将是'123A......',并且该值将是集合中的匹配列表。我觉得这样用正则表达式将路比一些杂七杂八的编程方式更好...

到目前为止,我在想是这样

baseMatch = re.compile('123A......') 
baseMatch.findall('123A[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]') 

但是这看起来跛脚,我有一个怀疑,有一个更好的方法。

+0

它看起来像你试图使用正则表达式在两种情况下的正则表达式和作为字符串,你试图找到子字符串。 – oleg

回答

1

你应该在你的正则表达式使用量词,像这样:

baseMatch = re.compile('123A[A-Z]{6}') 
baseMatch.findall('123AABCDEFxyz123AAABCDExyz') 
['123AABCDEF', '123AAABCDE'] 
+0

谢谢你在'[A-Z]'里面,我怎么也可以做'.'匹配?它会是'[A-Z \。]'吗? –

+1

@EdgarAroutiounian,正确 – iruvar

1

如果你知道前缀(键),只是做

dic = dict() 
st = '123AHELLO' 
val = st.split('123A')[1] 
dic['123A'] = val 

你的问题不过目前尚不清楚。如果要提取后缀的子集合时,前缀为'123A',那么你可以做

st_lst = ['123AHELLO','123AHALLO','123BHELLO','123AGREAT'] 
res = [st.split('123A')[1] for st in st_lst if '123A' in st] 

给你

>>> res 
['HELLO', 'HALLO', 'GREAT'] 
+0

我认为使用正则表达式更清洁... – Alex

+0

非常感谢,我可能最终会使用这个,但是这一点我想用至少一点正则表达式。 –

0

如果你的“钥匙”总是前4个字符,你可以再次拆分字典列表。字典提供非常快速的查找,这是一个很好的索引方法。

indx = dict() 
inp = ['123AAAA','123ABBB','123ACCC'] 
for line in inp: 
    try: 
    indx[line[:4]].append(line[4:]) 
    except KeyError: 
    indx[line[:4]] = [] 
    indx[line[:4]].append(line[4:]) 

>>indx['123A'] 
['AAA', 'BBB', 'CCC'] 

我可能会得到不赞成使用“尝试:”在飞行中初始化一个字典()虽然:)