2

假设我们有一个字符串,'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]')

但这看起来很蹩脚,我怀疑有更好的方法。

4

3 回答 3

1

您应该在正则表达式中使用量词,如下所示:

baseMatch = re.compile('123A[A-Z]{6}')
baseMatch.findall('123AABCDEFxyz123AAABCDExyz')
['123AABCDEF', '123AAABCDE']
于 2013-06-05T15:20:45.343 回答
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']
于 2013-06-05T15:18:15.070 回答
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() 而皱眉:)

于 2013-06-05T16:38:57.387 回答