您可以使用正则表达式\.\d+,\d+\.
找到该模式的所有匹配项,但是您需要做一些额外的事情才能获得您期望的输出,特别是因为您想要处理.5,6.7,8.
作为两场比赛。
这是一种可能的解决方案:
def transform(s):
s = re.sub(r'(\.\d+,\d+)+\.', lambda m: m.group(0).replace('.', '\n'), s)
return tuple(s.split('\n'))
例子:
>>> transform('Test1.0,0.csv')
('Test1', '0,0', 'csv')
>>> transform('Test2.wma')
('Test2.wma',)
>>> transform('Test3.1100,456.jpg')
('Test3', '1100,456', 'jpg')
>>> transform('T.E.S.T.4.5,6.png')
('T.E.S.T.4', '5,6', 'png')
>>> transform('Test5,7,8.sss')
('Test5,7,8.sss',)
>>> transform('Test6.2,3,4.png')
('Test6.2,3,4.png',)
>>> transform('Test7.5,6.7,8.test')
('Test7', '5,6', '7,8', 'test')
要在没有匹配项时也拆分文件扩展名,您可以使用以下命令:
def transform(s):
s = re.sub(r'(\.\d+,\d+)+\.', lambda m: m.group(0).replace('.', '\n'), s)
groups = s.split('\n')
groups[-1:] = groups[-1].rsplit('.', 1)
return tuple(groups)
这将是与上面相同的输出,除了'Test2.wma'
变成('Test2', 'wma')
,具有类似的行为'Test5,7,8.sss'
and 'Test5,7,8.sss'
.