python复习之【fnmatch模式匹配】

举报
livingbody 发表于 2022/12/29 10:49:06 2022/12/29
【摘要】 fnmatch模块为大多数开发人员提供了一种简化的模式匹配语言,该语言具有非常快速且易于理解的语法。很少有字符具有特殊含义:*指任何文本?表示任何字符[...]指方括号内包含的字符[!...]指除方括号内的字符以外的所有内容 1.fnmatch.fnmatchimport fnmatchfnmatch.fnmatch('hello.txt','*.txt')True也可用于文本分隔def d...

fnmatch模块为大多数开发人员提供了一种简化的模式匹配语言,该语言具有非常快速且易于理解的语法。

很少有字符具有特殊含义:

  • *指任何文本
  • ?表示任何字符
  • [...]指方括号内包含的字符
  • [!...]指除方括号内的字符以外的所有内容

1.fnmatch.fnmatch

import fnmatch

fnmatch.fnmatch('hello.txt','*.txt')
True

也可用于文本分隔

def declare(decl):
    if not fnmatch.fnmatch(decl,'*:*:*'):
        return False
    t,n,v=decl.split(':',2)
    globals()[n]=getattr(__builtins__, t)(v)
    return True
declare('int:somenum:3')
True
somenum
3

2.fnmatch.filter

# 文件匹配
import os
fnmatch.filter(os.listdir(), '*.ipynb')
['main.ipynb', 'python复习之【Counter计数】.ipynb']

3.fnmatch.translate

将匹配模式翻译为正则表达式

reg = '({})|({})'.format(fnmatch.translate('*.success*'), 
                             fnmatch.translate('*ipynb*'))

reg
'((?s:.*\\.success.*)\\Z)|((?s:.*ipynb.*)\\Z)'
import re
[s for s in os.listdir() if re.match(reg, s)]
['main.ipynb',
 'python复习之【Counter计数】.ipynb',
 '.ipynb_checkpoints',
 '.homedata.success',
 '.aistudiofs.success']

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。