Python:如何基于重复分隔符的最后一次出现拆分文件名?
如何基于重复分隔符的最后一次出现拆分文件名?
问题场景
你需要拆分文件名,规则是:遇到连续下划线时,仅将最后一个下划线作为分隔符,前面的连续下划线保留在对应字段中。具体示例如下:
输入文件名
abc_123 abc_123_d4 abc__123 (2 underscores) abc_123__d4 (2 underscores) abc____123 (4 underscores)
预期输出
abc, 123 abc, 123, d4 abc_, 123 (1 underscore) abc, 123_, d4 (1 underscore) abc___, 123 (3 underscores)
直接使用filename.split("_")会将所有下划线视为分隔符,导致连续下划线被完全拆分,丢失前面的下划线部分,得到不符合预期的结果:
abc, 123 abc, 123, d4 abc, 123 abc, 123, d4 abc, 123
解决方案
使用正则表达式的正向否定预查,匹配那些后面不跟随下划线的下划线(即连续下划线的最后一个,或单个下划线),以此作为分隔符拆分。
代码实现
import re def split_filename(filename): return re.split(r'_(?![_])', filename) # 测试用例 test_files = [ 'abc_123', 'abc_123_d4', 'abc__123', 'abc_123__d4', 'abc____123' ] for file in test_files: print(', '.join(split_filename(file)))
运行结果
abc, 123 abc, 123, d4 abc_, 123 abc, 123_, d4 abc___, 123
正则说明
r'_(?![_])'的含义是:匹配一个下划线,且该下划线的后面不是下划线。这样就能精准定位到需要作为分隔符的下划线,同时保留连续下划线中前面的部分在对应字段内。
内容的提问来源于stack exchange,提问作者Rinku27
相关产品推荐
相关产品推荐

