Python正则拆分多分隔符字母数字字符串提取指定子串
正则提取文件名指定字段解决方案
不要用re.split处理这类固定结构的字段提取——split的捕获组会把所有匹配到的分隔片段、未匹配的空组全部塞进返回列表,很容易产生冗余值,直接写匹配规则抓目标捕获组逻辑更简单,结果也干净。
可直接运行的代码
import re s = '52798687KF_12712320CP.txt' # 正则按规则匹配四个目标字段 reg = r'^(\d+)([A-Za-z]{2})_([A-Za-z0-9]+)([A-Za-z]{2})\.[^.]+$' res = list(re.match(reg, s).groups()) print(res)
运行输出:
['52798687', 'KF', '12712320', 'CP']
正则规则对应说明
正则每个部分严格匹配给出的提取要求:
^:锚定字符串开头,避免匹配到文件名中间的无关片段(\d+):第一个捕获组,匹配1位及以上连续数字,对应第一个待提取元素([A-Za-z]{2}):第二个捕获组,匹配第一串数字和下划线之间的2个字母,对应第二个待提取元素_:匹配文件名里的固定下划线分隔符([A-Za-z0-9]+):第三个捕获组,匹配1位及以上连续字母/数字,对应第三个待提取元素([A-Za-z]{2}):第四个捕获组,匹配扩展名点号前的2个字母,对应第四个待提取元素\.[^.]+$:匹配末尾的文件扩展名(点号+后缀直到字符串结尾),这部分不放入捕获组,不会出现在结果里
如果后续文件名的数字长度、字母内容发生变化,只要整体结构保持「数字串+2字母_字母数字串+2字母.后缀」的规则,这段代码都能正常提取。
内容的提问来源于stack exchange,提问作者Genik
相关产品推荐
相关产品推荐

