与re modu匹配

2024-06-26 15:01:02 发布

您现在位置:Python中文网/ 问答频道 /正文

有些词不一定以_v123.ext结尾 例如:

var_a='FWPR_102_002_020-Xyz_v002.txt'
var_b='102_002_020_002_.dbl

var_a上使用re

import re 
result = re.search(r'(\d+.\w+)$', var_a)
group=result.groups() 

但是当var_b返回None时,它会抛出AttributeError崩溃:

'NoneType' object has no attribute 'groups'

只有当basename以_v(可以是小写和大写)结尾,后跟一个或多个数字(以句点分隔文件扩展名和basename)时,表达式才应返回


Tags: importretxtsearchvar结尾resultext
1条回答
网友
1楼 · 发布于 2024-06-26 15:01:02

使用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'之前的'_'条件)

相关问题 更多 >