假设我们有一个字符串'123A......'
。我有一组其他字符串也以'123A......'
开头,其中A是字母表中的其他字母,例如'123AA.....'
和'123AB.....'
以及'123ABA....'
等等。
我想创建一个字典,其中键为'123A......'
,值将是集合中匹配项的列表。我认为用正则表达式做这件事会比一些大杂烩的程序化方式更好......
到目前为止,我正在考虑像
这样的事情baseMatch = re.compile('123A......')
baseMatch.findall('123A[A-Z][A-Z][A-Z][A-Z][A-Z][A-Z]')
但这看起来很蹩脚,我怀疑有更好的方法。
答案 0 :(得分: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']
答案 1 :(得分:1)
您应该在正则表达式中使用量词,如下所示:
baseMatch = re.compile('123A[A-Z]{6}')
baseMatch.findall('123AABCDEFxyz123AAABCDExyz')
['123AABCDEF', '123AAABCDE']
答案 2 :(得分:0)
如果您的“密钥”始终是前4个字符,则再次将字典拆分为字典。 dicts提供非常快速的查找,这是一种很好的索引方法。
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']
我可能不赞成使用“try:”来动态初始化dict():)