这里是:
str_ = 'file_.csv_.csv.bz2'
re.sub(regex, '', str_)
我想要“正则表达式”值来获取'file_.csv_'
,即没有实际扩展名的文件名'.csv.bz2'
,而'.csv.*'
可以是.* = ''|bz2|gz|7z|
...任何压缩格式。
更准确地说,我希望re.sub
能够最贪婪地从str_
的末尾开始匹配。
使用regex = '\.csv.*$'
,我只会获得'file_'
。
我当然可以os.path.splitext()
- 检查str_
是否以'.csv'
- os.path.splitext()
结尾,如果是的话,但是有更短的方式吗?
答案 0 :(得分:2)
您可以使用re.split()
分割后缀:
result = re.split(r'\.csv(?:\.\w+)?$', filename)[0]
演示:
>>> import re
>>> filename = 'file_.csv_.csv.bz2'
>>> re.split(r'\.csv(?:\.\w+)?$', filename)[0]
'file_.csv_'
>>> re.split(r'\.csv(?:\.\w+)?$', 'foobar_.csv_.csv')[0]
'foobar_.csv_'
>>> re.split(r'\.csv(?:\.\w+)?$', 'foobar_.csv_.csv.gz')[0]
'foobar_.csv_'
答案 1 :(得分:0)
这将删除所有连续扩展并仅打印文件名
>>> s = "file_.csv_.csv.bz2"
>>> m = re.sub(r'[.a-z0-9]+$', r'', s)
>>> m
'file_.csv_'
>>> s = "foobar_.csv_.csv.gz"
>>> m = re.sub(r'[.a-z0-9]+$', r'', s)
>>> m
'foobar_.csv_'