python - 基于正则表达式拆分python列表

标签 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']

如何将它分成 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']

列表根据年份之前的单词拆分,即 2000...

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

最佳答案

你可以在这里使用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])

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

关于python - 基于正则表达式拆分python列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37912620/

相关文章:

python - 为什么\* 即使是原始字符串也会转义?

python - unicode() 参数 2 必须是字符串而不是 None

python - 使用 matplotlib.widgets 中的 slider 后如何获取条形图值?

python - 在 python 中使用 Clipper 库生成多边形偏移

node.js - 确定 SQL 别名何时可以是开放名称

regex - REGEX从.1-5抓取一个数字

javascript - 在正则表达式中,当字符不在其他字母字符中时如何查找和替换字符?

regex - 重定向到文件名部分已知/部分未知的 CSS/JS 文件

python - 在 Flask 工厂设置中反射(reflect)不同的数据库

python - 类查找函数python