基于正则表达式分割Python列表

use*_*827 2 python regex

我有以下 python 列表:

['chhattisgarh_2015_aa.csv', 'chhattisgarh_2016_aa.csv', 'daman_and_diu_2000_aa.csv', 'daman_and_diu_2001_aa.csv', 'daman_and_diu_2002_aa.csv']
Run Code Online (Sandbox Code Playgroud)

如何将其分成 2 个列表:

['chhattisgarh_2015_aa.csv', 'chhattisgarh_2016_aa.csv'] and ['daman_and_diu_2000_aa.csv', 'daman_and_diu_2001_aa.csv', 'daman_and_diu_2002_aa.csv']
Run Code Online (Sandbox Code Playgroud)

该列表根据年份(即 2000 年)之前的单词进行划分...

我知道我应该在 python 中使用正则表达式,但不知道该怎么做。此外,该解决方案需要可扩展,并且不依赖于实际名称,例如 chattisgarh

Blo*_*ard 5

您可以在这里使用itertools.groupby

import itertools
import re

list = ['chhattisgarh_2015_aa.csv', 'chhattisgarh_2016_aa.csv',
        'daman_and_diu_2000_aa.csv', 'daman_and_diu_2001_aa.csv',
        'daman_and_diu_2002_aa.csv']

grouped = itertools.groupby(sorted(list), lambda x: re.match('(.+)_\d{4}', x).group(1))    

for (key, values) in grouped:
    print(key)
    print([x for x in values])
Run Code Online (Sandbox Code Playgroud)

正则表达式(.+)_\d{4}匹配一组至少一个字符(这就是我们分组的依据),后跟下划线和 4 位数字。