正则表达式

Python—正则表达式

***正则表达式***为高级人文本模式匹配、抽取、文本形式的搜索和替换功能提供了基础。简单地说,**正则表达式(regex)**是一些由字符和特殊特号组成的字符串,它们描述了模式的重复或者表述多个字符,于是正则表达 式能按照某种模式匹配一系列有相似特征的字符串。

re

在python中需要通过正则表达式对字符串进行匹配的时候 ,可以使用一个模拟,名字为re,re模块在古老的python1.5版中引入,用于替换那些已经过时regex模块和regsub模块——这两个模块在python2.5版中移除,而且此后导入这两个模块中的任意一个都会触发ImportError异常

re模块支持更强大的而且更通用的Perl风格的正则表达试,该模块允许多个线程共享一个已编译的正则表达式对象,也支持命名子组

#导入re模块
import re

#使用match方法进行匹配  match能够匹配以xx开关的字符串
result = re.match(正则表达式,要匹配的字符串)

#如果上一步匹配到数据的话,可以使用group方法来提取灵气
result.group()



示例
>>> import re
>>> result = re.match("hello","hello world")
>>> result.group()
'hello'
  • 匹配单个字符

    字符功能
    .匹配任意1个字符 (除了\n)
    []匹配[]中列举的字符
    \d匹配数字,即0-9
    \D匹配非数字,即不是数字
    \s匹配空白 ,即空格,tab键
    \S匹配非空白
    \w匹配单词字符,即a-z 、A-Z 、0-9 、_
    \W匹配非单词字符
    #案例1
    
    import re
     result = re.match(".o","to").group()
     print(result)
    #结果
    to
    
    #案例2   大小写都可以写的情况 
     result = re.match("[hH]ello","HelloWorld")
     print(result.group())
    #结果
    Hello
    
     result = re.match("[hH]ello","helloWorld")
     print(result.group())
    #结果
    hello
    
    #案例3 
     ret = re.match("嫦娥\d号","嫦娥1号发射成功") 
     print(ret.group())
    #结果
    嫦娥1号
    
     ret = re.match("嫦娥\d号","嫦娥2号发射成功") 
     print(ret.group())
    #结果
    嫦娥2号
     
     ret = re.match("嫦娥\d号","嫦娥3号发射成功") 
     print(ret.group())
    #结果
    嫦娥2号
    
    案例
     ret = re.match("pytho\w","python").group()
     print(ret)
    #结果
    python
    
  • 匹配多个字符

    字符功能
    *匹配前一个字符出现0次或者无限次
    +匹配前一个字符出现1次或者无限次
    匹配前一个字符出现1次或者0次,即要么有1次,要么没有
    {m}匹配前一个字符出现m次
    {m,n}匹配前一个字符出现从m到n次
    #案例
    >>>import re
    >>> ret = re.match("[A-Z][a-z]*","M")
    >>> print(ret.group())
    M
    >>> 
    >>> ret = re.match("[A-Z][a-z]*","MnnM")
    >>> print(ret.group())
    Mnn
    >>> 
    >>> ret = re.match("[A-Z][a-z]*","Aabcdef")
    >>> print(ret.group())
    Aabcdef
    >>> 
    
    #案例
    >>> names = ["name1", "_name", "2_name", "__name__"]
    >>> for name in names:
    ...     ret = re.match("[a-zA-Z_]+[\w]*",name)
    ...     if ret:
    ...         print("变量名 %s 符合要求" % ret.group())
    ...     else:
    ...         print("变量名 %s 非法" % name)
    ... 
    变量名 name1 符合要求
    变量名 _name 符合要求
    变量名 2_name 非法
    变量名 __name__ 符合要求
    
    
    #案例
    >>> ret = re.match("[1-9]?[0-9]","7")
    >>> print(ret.group())
    7
    >>> 
    >>> ret = re.match("[1-9]?\d","33")
    >>> print(ret.group())
    33
    >>> 
    >>> ret = re.match("[1-9]?\d","09")
    >>> print(ret.group())
    0
    
    
    
    #案例
    >>> ret = re.match("[a-zA-Z0-9_]{6}","12a3g45678")
    >>> print(ret.group())
    12a3g4
    >>> 
    >>> ret = re.match("[a-zA-Z0-9_]{8,20}","1ad12f23s34455ff66")
    >>> print(ret.group())
    1ad12f23s34455ff66
    >>> 
    
  • 匹配开头结尾

    字符功能
    ^匹配字符串开头
    $匹配字符串结尾
    >>> email_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei",".com.xiaowang@qq.com"]
    >>> 
    >>> for email in email_list:
    ...     ret = re.match("[\w]{4,20}@163\.com$", email)
    ...     if ret:
    ...         print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
    ...     else:
    ...         print("%s 不符合要求" % email)
    ... 
    xiaoWang@163.com 是符合规定的邮件地址,匹配后的结果是:xiaoWang@163.com
    xiaoWang@163.comheihei 不符合要求
    .com.xiaowang@qq.com 不符合要求
    >>> 
    
  • 匹配分组

    字符功能
    |匹配左右任意一个表达式
    (ab)将括号中字符作为一个分组
    \num应用分组num匹配到的字符串
    (?p<name)分组别名
    (?P=name)引用别名为name分组匹配到的字符串
    #案例
    >>> import re
    >>> 
    >>> ret = re.match("\w{4,20}@163\.com", "test@163.com")
    >>> print(ret.group()) 
    test@163.com
    >>> 
    >>> ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@126.com")
    >>> print(ret.group())  
    test@126.com
    >>> 
    >>> ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@qq.com")
    >>> print(ret.group())  
    test@qq.com
    >>> 
    >>> ret = re.match("\w{4,20}@(163|126|qq)\.com", "test@gmail.com")
    >>> if ret:
    ...     print(ret.group())
    ... else:
    ...     print("不是163、126、qq邮箱")  # 不是163、126、qq邮箱
    ... 
    不是163126、qq邮箱
    >>> 
    
    
    #案例
    >>> test_label = "<html>hh</htmlbalabala>"
    >>> ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", test_label)
    >>> if ret:
    ...     print(ret.group())
    ... else:
    ...     print("%s 这是一对不正确的标签" % test_label)
    ... 
    <html>hh</htmlbalabala> 这是一对不正确的标签
    >>> 
    
    
    #案例
    >>> labels = ["<html><h1>www.ccitboy.cn</h1></html>", "<html><h1>www.ccitboy.cn</h2></html>"]
    >>> 
    >>> for label in labels:
    ...     ret = re.match(r"<(\w*)><(\w*)>.*</\2></\1>", label)
    ...     if ret:
    ...         print("%s 是符合要求的标签" % ret.group())
    ...     else:
    ...         print("%s 不符合要求" % label)
    ... 
    <html><h1>www.ccitboy.cn</h1></html> 是符合要求的标签
    <html><h1>www.ccitboy.cn</h2></html> 不符合要求
    
    
    #案例 P大写
    >>> ret = re.match(r"<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>", "<html><h1>www.ccitboy.cn</h1></html>")
    >>> ret.group()
    '<html><h1>www.ccitboy.cn</h1></html>'
    >>> 
    

search

search()的工作方式与match()完全一致,不同之处在于search()会用到字符串参数,在任意位置对给定正则表达式模式搜索第一次出现的匹配情况。如果搜索到成功的匹配,就会返回一个匹配的对象;否则,返回None

>>> import re
>>> ret = re.search("bit","hello bit me!!")
>>> print(ret.group())
bit
>>> 


>>> ret = re.search("bit","hello ss me!!")
>>> print(ret)
None
>>> 

findall

findall()查询字符串中某个正则表达式模式 全部非重复出现的情况,这与search()在执行字符串搜索时类似 ,但与match()和search()的不同之处在于,findall()总是返回一个列表,如果 findall()没有找到匹配的部分,就返回一个空列表,但如果匹配成功,列表将包含所有匹配成功部分

>>> re.findall('car','carry the barcardi to the car')
['car', 'car', 'car']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值