与re模块匹配

时间:2015-09-10 06:38:56

标签: python

有些词可能不一定以_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结尾(可以更低且为大写)后跟一个或多个数字后面返回,后者将文件扩展名与基本名称分开。

1 个答案:

答案 0 :(得分:2)

使用os获取文件的基本名称,使用str.splitstr.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>