【发布时间】:2022-06-23 21:49:44
【问题描述】:
早上好,
我有一系列52798687KF_12712320CP.txt形式的文件名,我从中提取了四个子字符串,即52798687、KF、12712320和CP。
目前,我通过一系列粗略的拆分操作得到这些元素:
s = '52798687KF_12712320CP.txt'
f1 = s.split('_')[0][:-2])
f2 = s.split('_')[0][-2:])
f3 = s.split('_')[1][:-6])
f4 = s.split('_')[1][-6:-4])
我希望使用正则表达式通过单个语句来实现相同的结果,因为如下所述,名称结构可能会因某些条件而异。
但是我被卡住了,因为我无法编写合适的语法;经过不同的尝试,我想出了这个部分解决方案:
import re
s = '52798687KF_12712320CP.txt'
reg = r"(?<=\d)(?=\D)|(_)|(.[a-z]{3})|(?=\d).(?<=\D)"
x = re.split(reg, s)
但它会导致列表中的元素过多:
['52798687', None, None, 'KF', '_', None, '12712320', None, None, 'CP', None, '.txt', '']
而我想要一个包含以下内容的列表:
['52798687', 'KF', '12712320', 'CP']
关于每个元素的一些细节:
- 至少一位数;
- 两个字母,在最后一个数字和下划线之间;
- 至少一个字母数字字符;
- 延长期限前两个字母。
非常感谢!
【问题讨论】: