zoukankan      html  css  js  c++  java
  • python 正则表达式

    字符点:匹配任意一个字符

    import re
    st = 'python'
    result = re.findall('p.t',st)
    print(result)

    字符^:匹配以什么开头

    import re
    st = 'python'
    result = re.findall('^py',st)
    print(result)

    字符$:匹配以什么结尾

    import re
    st = 'python'
    result = re.findall('n$',st)
    print(result)

    字符*:匹配任意次,包括0次

    import re
    st = 'I looooooove python'
    result = re.findall('lo*ve',st)#字符0可以没有,也可以无限多个,都可以匹配
    print(result)

    字符+:匹配一次或多次

    import re
    st = 'I looooooove python'
    result = re.findall('lo+ve',st)#字符0没有就匹配不上
    print(result)

    字符?:匹配0次或一次

    import re
    st = 'I love python'
    result = re.findall('lo?ve',st)#字符0没有也能匹配
    print(result)

    {m}:匹配前一个字符的m次

    import re
    st = 'I loooove python'
    result = re.findall('o{3}',st)#匹配3个o字符
    print(result)

    {m,n}:匹配前一个字符的m-n次

    import re
    st = 'I loooove python'
    result = re.findall('lo{1,4}ve',st)
    print(result)

    [abc]或[a-c]:匹配[]中的任意一个字符

    import re
    st = 'I loooove python'
    result = re.findall('l[0-z]*e',st)
    print(result)

    [a|b]:匹配字符a或字符b

    import re
    st = 'I lbve python'
    result = re.findall('l[a|b]ve',st)
    print(result)

    [^1-9]:[]里出现^字符,表示非的意思,并不表示以什么开头的意思

    import re
    st = 'I lb2ve python6'
    result = re.findall('[^0-9]',st)
    print(result)
    ##########################################
    ['I', ' ', 'l', 'b', 'v', 'e', ' ', 'p', 'y', 't', 'h', 'o', 'n']

     :

    • 反斜杠后边跟元字符去除特殊功能
    • 反斜杠后边跟普通字符实现特殊功能
    • 引用序号对应的字组所匹配的字符串

    数量词的贪婪模式与非贪婪模式

    正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*"如果用于查找"abbbc",将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。

    import re
    result = re.findall(r'ab*','abbbc')
    print(result)
    ##########################################
    ['abbb']
    import re
    result = re.findall(r'ab*?','abbbc')#取消贪婪模式
    print(result)
    ##########################################
    ['a']

    re.match() 从头匹配

    复制代码
    import re
    origin = "hello poe bcd jet who are you 20"
    r = re.match("hw+",origin)
    print(r.group())    #获取匹配到的所有结果
    print(r.groups())   #获取模型中匹配到的分组结果
    print(r.groupdict())    #获取模型中匹配到的分组结果
    ##########################################
    hello
    ()
    {}
    复制代码
    复制代码
    r = re.match("(h)(w+)",origin)
    print(r.group())        #获取匹配到的所有结果
    print(r.groups())       #获取模型中匹配到的分组结果
    print(r.groupdict())    #获取模型中匹配到的分组结果
    ##########################################
    hello
    ('h', 'ello')
    {}
    复制代码
    复制代码
    r = re.match("(?P<n1>h)(?P<n2>w+)",origin)
    # ?P<n1> :以键为n1,值为匹配到的这个分组,保存到字典中!?P<>这个是固定的写法
    print(r.group())        #获取匹配到的所有结果
    print(r.groups())       #获取模型中匹配到的分组结果
    print(r.groupdict())    #获取模型中匹配到的分组结果
    ##########################################
    hello
    ('h', 'ello')
    {'n2': 'ello', 'n1': 'h'}
    复制代码

    re.search() 浏览全部字符串,匹配第一个符合规则的字符串

    与re.match()用法基本一样

    复制代码
    import re
    origin = "hello poe bcd jet poe who are you 20"
    r = re.search("p(w+).*(?P<name>d)$",origin)
    # ?P<n1> :以键为n1,值为匹配到的这个分组,保存到字典中!?P<>这个是固定的写法
    print(r.group())        #获取匹配到的所有结果
    print(r.groups())       #获取模型中匹配到的分组结果
    print(r.groupdict())    #获取模型中匹配到的分组结果
    ##########################################
    poe bcd jet poe who are you 20
    ('oe', '0')
    {'name': '0'}
    复制代码

    re.findall() 将匹配的所有内容都放置在一个列表中

    注:此方法空匹配也会保存到结果中,如:

    result = re.findall("","a2b3c4d5")
    print(result)
    print(len(result))
    ##########################################
    ['', '', '', '', '', '', '', '', '']

    re.findall()方法要注意有分组的情况:

    #没有分组的情况
    r = re.findall("pw+",origin)
    print(r)
    ##########################################
    ['poe', 'poe']
    #有分组的情况,会把匹配到的分组放到结果列表中
    r = re.findall("p(w+)",origin)
    print(r)
    ##########################################
    ['oe', 'oe'] 

    re.finditer() 

    复制代码
    import re
    origin = "hello poe bcd jet poe who are you 20"
    r = re.finditer("(p)(w+(e))",origin)
    for i in r :
        print(i.group())
        print(i.groups())
        print(i.groupdict()) 
    复制代码

    re.split() 

    无分组情况,匹配到的字符串不会出现在匹配结果中:

    import re
    origin = "hello poe bcd jet poe who are you 20"
    r = re.split("aw+",origin,1)
    print(r)
    ##########################################
    ['hello poe bcd jet poe who ', ' you 20']

    有分组情况,匹配到的分组字符串也会出现在匹配结果中:

    import re
    origin = "hello poe bcd jet poe who are you 20"
    r = re.split("a(w+)",origin,1)
    print(r)
    ##########################################
    ['hello poe bcd jet poe who ', 're', ' you 20']

    re.sub() 正则替换

    import re
    origin = "1yiuoosfd234kuiuadf789v,xznfa978"
    new_str = re.sub("d+","KKK",origin,1)#参数1表示只替换匹配到的第一个字符串,如果是2表示替换匹配到的前2个字符串
    print(new_str)
    ##########################################
    KKKyiuoosfdKKKkuiuadf789v,xznfa978

    re.subn()只是比re.sub()多返回一个数据,如:

    import re
    origin = "1yiuoosfd234kuiuadf789v,xznfa978"
    new_str,count = re.subn("d+","KKK",origin)#参数1表示只替换匹配到的第一个字符串
    print(new_str,count)
    ##########################################
    KKKyiuoosfdKKKkuiuadfKKKv,xznfaKKK 4
  • 相关阅读:
    [读书笔记]捉虫日记
    花生壳建站全过程
    (step4.3.9)hdu 1584(蜘蛛牌——DFS)
    鼠标移到导航上面 当前的LI变色 处于当前的位置
    JavaScript学习笔记
    由Maximum Gap,对话桶排序,基数排序和统计排序
    安德鲁斯Launcher得到的装在手机的应用程序列表
    broadAnywhere:Broadcast组件权限绕过漏洞(Bug: 17356824)
    Ubuntu logomaker sh: 1: pngtopnm: not found 解决方案
    HDU 1598 find the most comfortable road (罗列+Kruskal) 并检查集合
  • 原文地址:https://www.cnblogs.com/fkkk/p/6401985.html
Copyright © 2011-2022 走看看