Python Re,需要一个匹配列表

时间:2013-06-05 15:13:13

标签: python regex

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

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

3 个答案:

答案 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():)