Python学习笔记-高级技巧-正则表达式

正则表达式:使用单个字符串来描述、匹配某个句法规则的字符串。主要通过字符串定义规则,检查输入字符串是否匹配。

Python正则表达式,使用re模块,并基于re模块中三个基础方法(match/search/findall)做正则匹配

#match 从头匹配
import re
s = 'fjofo njkrf njkds"
result = re.match("fjofo", s)
print(result)
print(result.span())#如果匹配成功,则返回字符串所在的长度区间
print(result.group())#如果匹配成功,则返回匹配成功的字符串


#search 搜索匹配,找到一个之后,就停止;整个字符串都找不到,则返回None
result = re.search("ehik", s)
print(result)


#findall 搜索全部匹配,如果找得到,以列表形式输出找到的所有值;找不到则返回空list
result = re.findall("dhfj", s)
print(result)

元字符匹配

单字符匹配

字符功能
.匹配任意1个字符(除了\n),\. 匹配点本身

[ ]

匹配[]中列举的字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格,tab键
\S匹配非空白
\w匹配单词字符,即a-z,A-Z,0-9,_
\W

匹配非单词字符

#
#r,表示转义字符无效

s = "fjle $@lk21^&*&h kjsd"

#1、找到全部数字
result = re.findall(r'\d', s)
#2、找到特殊字符
result = re.findall(r'\W', s)
#3、找到全部英文字母
result = re.findall(r'[a-zA-Z]', s)#[]内的定义自由

  数量匹配

字符功能
*匹配前一个规则的字符0~无数次
+匹配前一个规则的字符1~无数次
?匹配前一个规则的字符0次或者1次
{m}匹配前一个规则的字符出现m次
{m,}匹配前一个规则的字符出现最少m次
{m,n}匹配前一个规则的字符出现m到n次

边界匹配

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配非单词边界

分组匹配

字符功能
|匹配左右任意一个表达式
()将括号中字符作为一个分组
#案例分析
#1、匹配账号,只能由字母和数字组成,长度限制6-10位
#规则:^[a-zA-Z0-9]{6,10}$ 


#2、匹配QQ号,要求纯数字,长度5-11,第一位不为0
#规则:^[1-9][0-9]{4,10}$



#3、匹配邮箱地址,只允许qq,163,gmail
#规则;^[\W-]+(\.[\W-]+)*@(qq|163|gmail)(\.[\W-]+)+$
#规则:[].[].[].[].[].@[].[].[]
#规则:(^[\w-]+(\.[\w-]+)*@(qq|l63|gmail)(\.[\w-]+)*$)
#如果正则中有多个用()括起来的组,findall会给每个组输出一个数;
#如果我们只想要一个组,最外层加个括号就好

递归:

在满足条件的情况下,函数自己调用自己的一种特殊编程技巧(编程时,1、注意退出条件,否则容易编程无限递归;2、注意返回值的传递,确保从最内层,层层传递到最外层)

例子,找出一个文件夹下的所有文件

#演示OS模块的3个基础方法
os.listdir("路径")#显示当前路径下的文件夹
os.patj.isdir("路径")#判断当前路径是否指向一个文件夹,是,返回True
os.path.exists("路径")#判断当前路径是否在存在


#递归找文件

def get_file_rec_from_dir(path):
    
    file_list = [] 
    if os.path.exists(path):
        for f in os.listdir(path):
            new_path = path + "/" + f
            if os.path.isdir(new_path):
                file_list += get_file_rec_from_dir(new_path)
            else
                file_list.append(new_path)
    else:
        print(f"指定目录{path},不存在")
        return []
    return file_list

if __name__ = '__main__':
    print(get_file_rec_from_dir("D:/test"))
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值