python第十一天笔记

正则表达式:正则表达式也叫做匹配模式(Pattern),它由一组具有特定含义的字符串组成,通常用于匹配和替换文本。 

正则表达式,是一个独立的技术,很多编程语言支持正则表达式处理。 
    
什么是正则表达式(Regular Expression):
    
正则表达式历史:正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创新地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。 在1956 年,出生在被马克·吐温(Mark Twain)称为“美国最美丽的城市之一的”哈特福德市的一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。 之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作“Mastering Regular Expressions (2nd edition)”中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。 自此以后,正则表达式被广泛地应用到各种UNIX或类似于UNIX的工具中,如大家熟知的Perl。P
    
python如何使用正则:
    一般而言,不同的编程都会提供对正则的支持,如java中,字符串对象中,有些方法直接支持正则,也同时提供正则的对应类
    python也同样的道理,它为开发者提供了一个专门支持正则的模块 -- re

re模块:
    常见方法:
        compile()
        search()
        findall()
        finditer()
        sub()
        split()
        match("需要匹配的规则", 文本字符串)        # 表示从头匹配

 

 
    
元字符:
    
    .        # 匹配任意符号,除换行符之外(\n)
    \w        # 匹配有效符号(大小写字母、数字、_、各国的语言符号(python3)),不匹配特殊符号, 等价于:[a-zA-Z0-9_]
    \d        # 匹配数字0~9 十个数字,等价于 [0123456789]
    \s        # 匹配的空白位    常见的如:空格、\t、\n等符号

 

    [abcd]        # 该位置,必须是abcd中的某个来占位,列举
        |-- 匹配数字:[0123456789]、[0-9]
        |-- 匹配小写字母:[a-z]
        |-- 匹配大写字母:[A-Z]
        |-- 有效符号:[a-zA-Z0-9_]

    ^        # 以什么开头
    $        # 以什么结尾

            
反义符:
    \W        # 匹配特殊符号
    \D        # 匹配非数字
    \S        # 匹配非空白位
    [^abcd]        # 表示该位不能使用列举中的某个符号

 

转义符:
    在绝多数的编程语言中,字符串操作都是存在转义符, \x
    为什么在window系统的中,文件系统路径的分隔符是\\(本质最后是一个\)

    正则中呢?
    在正则中,反斜杠也存在转义的作用!!!

 

注意:在python中,如果出现路径等情况,建议使用r"regexp",这种方式,减少转义符多次转义!!
    推荐:所有的正则表达式前面,都建议加上r!!!!!

重复(位数):
    *        # 任意位(0到多位)
    +        # 1到多位
    ?        # 表示0或者1,也就是说:可以没有,也可以有,但是有的话,只能是一位
    {m}        # 表示m位,m是个正整数
    {m,}        # 表示至少m位,可以更多
    {m,n}        # 表示范围区间[m, n]    (m<=n)

        
课堂练习:
    匹配出openlab的邮箱地址,且@之前有4到20为字符,如59127_ljh@openlab.com
    [a-zA-Z0-9_]{4,20}@openlab\.com

 

 

分组:
    多个组合的列举:
        正则中,存在了一个|符号,表示的意思或者,多个中筛选
        [a-zA-Z0-9_]{4,20}@openlab\.(com|org|cn|io)


    括号除了在多个组合的列举作用外,还有一个非常重要的作用,就是分组

    在正则表达式进行匹配的时候,在匹配完成之后,可以做二次匹配!!!
    注意,分组是由括号完成的!!!

如何匹配一个标签:r"</?\w+>"

案例如下: 

 

贪婪与懒惰:
    正则表达式中,如果使用多位匹配,则存在了一个贪婪和非贪婪模式,
    贪婪模式:尽可能多的匹配
    非太贪婪模式:尽可能少的匹配

    贪婪模式 --> 懒惰模式,只需要在位数的后面加上?

 案例如下: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值