有些词可能不一定以_v123.ext
结尾
如:
var_a='FWPR_102_002_020-Xyz_v002.txt'
var_b='102_002_020_002_.dbl
在re
上使用var_a
:
import re
result = re.search(r'(\d+.\w+)$', var_a)
group=result.groups()
但是当var_b
返回None
时,它会崩溃抛出一个AttributeError:
'NoneType' object has no attribute 'groups'
表达式只应在基本名称以_v
结尾(可以更低且为大写)后跟一个或多个数字后面返回,后者将文件扩展名与基本名称分开。
答案 0 :(得分:2)
使用os
获取文件的基本名称,使用str.split
和str.join
删除扩展程序并检查最后一部分,使用str.isdigit
找出字符串是否只包含数字:
def is_file_interesting(filename):
if not filename:
return None
# remove extension 'blah.extension' -> 'blah'
filename = ".".join(filename.split(".")[:-1])
# last part of name 'blah_blah_v123' -> 'v123'
last_part = os.path.basename(filename).split("_")[-1]
# 'v1234' -> '1234'
digit_part = last_part[1:]
# check if actually only digits with 'v' in front
return last_part and (last_part[0] == 'v') and digit_part.isdigit()
我尽可能避免使用正则表达式。
另外,v123.extension
会在此处提供True
,我认为这是正确的处理(在'_'
之前不能满足'v'
的条件。)< / p>