• Python正则表达式


    re模块提供了和Perl里的正则表达式类似的功能,不管是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮。

    正则表达式使用反斜杆()来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义。这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解。比如,要匹配一个反斜杆本身,你也许要用'\\'来做为正则表达式的字符串,因为正则表达式要是\,而字符串里,每个反斜杆都要写成\。
    你也可以在字符串前加上 r 这个前缀来避免部分疑惑,因为 r 开头的python字符串是 raw 字符串,所以里面的所有字符都不会被转义,比如r' '这个字符串就是一个反斜杆加上一字母n,而' '我们知道这是个换行符。因此,上面的'\\'你也可以写成r'\',这样,应该就好理解很多了。不能理解看另一文:正则转义机制

    正则字符匹配很多,参考Python官方的文档:Python正则匹配模式

    re.match(pattern, string, flags=0) pattern为正则式,string为要匹配的字符串,flags可以控制正则的匹配方式;如是否区分大小写。

    import re
    
    >>>a = re.match(r'([0-9a-zA-Z])(@(a-z)+.[com]+)','mzc1997@gmail.com')
    >>>print(a.string)
    mzc1997@gmail

     使用re.search()进行字符串查找

    re.search()总是返回第一个查找到的字符串   不会返回其他的

    re.search(pattern,string,flags)

    import re
    
    >>>re.search(r'd','qwer12345zxc')
    <_sre.SRE_Match object; span=(4, 5), match='1'>

    使用re.findall()方法查找字符串,结果返回一个匹配结果的list

    re.findall(pattern,string,flags)

    import re
    
    >>>re.findall(r'd+','qwer12345zxc')
    ['12345']

     使用re.sub()进行正则匹配,然后替换匹配的内容

    re.sub(pattern,repl,string,count,flags)

    import re 
    
    a = re.compile(r'd+')
    str1 = 'Q12345Q'
    repl = 'mzc1997@gmail.com'
    res = re.sub(a,repl,str1)
    >>>print(res)
    Qmzc1997@gmail.comQ   #12345被repl字符串内容替换

    使用re.compile()  编译内容为正则字符串

    import re   
    
    re_mail = re.compile(r'([0-9a-zA-Z]+|[0-9a-zA-Z.]+)(@[a-z]+.[com]+)')
    
    #使用
    string = mzc1997@gmail.com
    
    >>>re_mail.match(string)    
    <_sre.SRE_Match object; span=(0, 17), match='mzc1997@gmail.com'>


    匹配对象有group方法
    group()可以返回子字符串
    groups()
    返回一个被分割开的字符串list
    import re
    a = re.match(r'([0-9a-zA-Z]+)(@[a-z].[com]+)','mzc1997@gmail.com')
    
    >>>a.group(0)    #0返回完整字符串
    'mzc1997@gmail.com'
    
    >>>a.group(1)   #返回匹配的第一项子串
    'mzc1997'
    
    >>>a.group(2)   #返回匹配的第二项子串
    '@gmail.com'

    >>>a.groups() #返回一个被分割开的字符串list
    ('mzc1997','@gmail.com')

    返回的子串有多少,取决于你在正则中如何把字符串分开匹配,也就是括号问题()。

    正则不仅用于匹配字符串,还可以用来切分字符串

    使用re.split(pattern,string)来切分

    >>>a = 'a b  c' 
    >>>a.split(' ')
    ['a', 'b', '', 'c']     #无法切分连续的空格
    
    >>>re.split(r's+',a) #无论字符串夹杂什么字符,只要在正则中写匹配式,都可以完全切分
    ['a', 'b', 'c']

    贪婪匹配

    正则匹配默认是贪婪匹配,会尽可能多的匹配字符

    import re
    
    >>>a = re.match(r'd+','123456')
    >>>print(a.string)
    '123456'
    
    
    >>>a = re.match(r'd+?','123456')
    >>>print(a.string)
    '1'

    一个问号就可以将贪婪匹配变为非贪婪匹配。

     
  • 相关阅读:
    Java中 Jwt
    Python中Jwt
    jwt流程
    Vue Demons
    Vue基础
    Mysql
    MongoDb
    2020/03/07-基础复习day_02
    2020/03/07-基础复习day_01
    基于springboot+dubbo的简易分布式小Demo
  • 原文地址:https://www.cnblogs.com/mzc1997/p/7683652.html
Copyright © 2020-2023  润新知