• Python正则表达式


    常见的正则表达式功能介绍

    正则表达式 功能说明
    . 表示一个除换行符( )外的所有字符
    ^ 表示输入行的开始
    $
    表示输入行的结束
    * 表示前一个项目可以出现0次或者无数次
    + 表示前一个项目可以出现1次或者无数次
    ? 表示前一个项目可以出现0次或者1次
    [abc] 表示一个符合a或b或c的任何字符
    [a-z] 表示一个符合a~z的任何字符
    表示后面的字符以常规字符处理
    {m} 表示前一个项目必须正好出现m次
    {m,} 表示前一个项目至少出现m次,最多可出现无数次
    {m,n} 表示前一个项目至少出现m次,最多出现n次
    d 表示一个数字,相当于[0123456789]或[0-9]
    ^ 求反运算,例如[^a-d]表示除a、b、c、d外的所有字符
    D 一个非数字字符,相当于[^0-9]
    换行符
    回车符(carriage renturn)
    tab 制表符
    s 空格符,相当于[ f]
    S 非空格符,相当于[^ f]
    w 一个数字、字母或下划线字符,相当于[0-9a-zA-Z_]
    W 一个非数字、字母或下划线字符,相当于[^w],即[^0-9a-zA-Z_]
    A 匹配字符串开始
     匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串
    z 匹配字符串结束
    G 匹配最后匹配完成的位置
    a|b 匹配a或b
    () 匹配括号内的表达式,也表示一个组

    re.match

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

    re.match(pattern, string, flags=0)

    最常规的匹配

    1 import re
    2 
    3 content = 'Hello 123 4567 World_This is a Regex Demo'
    4 print(len(content))
    5 result = re.match('^Hellosdddsd{4}sw{10}.*Demo$', content)
    6 print(result)
    7 print(result.group())
    8 print(result.span())
    View Code

    泛匹配

    1 import re
    2 
    3 content = 'Hello 123 4567 World_This is a Regex Demo'
    4 result = re.match('^Hello.*Demo$', content)
    5 print(result)
    6 print(result.group())
    7 print(result.span())
    View Code

    匹配目标

    1 import re
    2 
    3 content = 'Hello 1234567 World_This is a Regex Demo'
    4 result = re.match('^Hellos(d+)sWorld.*Demo$', content)
    5 print(result)
    6 print(result.group(1))
    7 print(result.span())
    View Code

    贪婪匹配

    1 import re
    2 
    3 content = 'Hello 1234567 World_This is a Regex Demo'
    4 result = re.match('^He.*(d+).*Demo$', content)
    5 print(result)
    6 print(result.group(1))
    View Code

    非贪婪匹配

    1 content = 'Hello 1234567 World_This is a Regex Demo'
    2 result = re.match('^He.*?(d+).*Demo$', content)
    3 print(result)
    4 print(result.group(1))
    View Code

    匹配模式

    1 import re
    2 
    3 content = '''Hello 1234567 World_This
    4 is a Regex Demo
    5 '''
    6 result = re.match('^He.*?(d+).*?Demo$', content, re.S)
    7 print(result.group(1))
    View Code

    转义

    1 import re
    2 
    3 content = 'price is $5.00'
    4 result = re.match('price is $5.00', content)
    5 print(result)
    View Code

    总结:尽量使用泛匹配、使用括号得到匹配目标、尽量使用非贪婪模式、有换行符就用re.S

    re.search

    re.search 扫描整个字符串并返回第一个成功的匹配。

    1 import re
    2 
    3 content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
    4 result = re.match('Hello.*?(d+).*?Demo', content)
    5 print(result)
    View Code
    1 import re
    2 
    3 content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
    4 result = re.search('Hello.*?(d+).*?Demo', content)
    5 print(result)
    6 print(result.group(1))
    View Code

    总结:为匹配方便,能用search就不用match

    re.findall

    搜索字符串,以列表形式返回全部能匹配的子串。

     1 import re
     2 
     3 html = '''<div id="songs-list">
     4     <h2 class="title">经典老歌</h2>
     5     <p class="introduction">
     6         经典老歌列表
     7     </p>
     8     <ul id="list" class="list-group">
     9         <li data-view="2">一路上有你</li>
    10         <li data-view="7">
    11             <a href="/2.mp3" singer="任贤齐">沧海一声笑</a>
    12         </li>
    13         <li data-view="4" class="active">
    14             <a href="/3.mp3" singer="齐秦">往事随风</a>
    15         </li>
    16         <li data-view="6"><a href="/4.mp3" singer="beyond">光辉岁月</a></li>
    17         <li data-view="5"><a href="/5.mp3" singer="陈慧琳">记事本</a></li>
    18         <li data-view="5">
    19             <a href="/6.mp3" singer="邓丽君">但愿人长久</a>
    20         </li>
    21     </ul>
    22 </div>'''
    23 results = re.findall('<li.*?href="(.*?)".*?singer="(.*?)">(.*?)</a>', html, re.S)
    24 print(results)
    25 print(type(results))
    26 for result in results:
    27     print(result)
    28     print(result[0], result[1], result[2])
    View Code

    re.sub

    替换字符串中每一个匹配的子串后返回替换后的字符串。

    1 import re
    2 
    3 content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
    4 content = re.sub('d+', 'Replacement', content)
    5 print(content)
    View Code
    1 import re
    2 
    3 content = 'Extra stings Hello 1234567 World_This is a Regex Demo Extra stings'
    4 content = re.sub('(d+)', r'1 8910', content)
    5 print(content)
    View Code

    re.compile

    将正则字符串编译成正则表达式对象

    将一个正则表达式串编译成正则对象,以便于复用该匹配模式

    1 import re
    2 
    3 content = '''Hello 1234567 World_This
    4 is a Regex Demo'''
    5 pattern = re.compile('Hello.*Demo', re.S)
    6 result = re.match(pattern, content)
    7 #result = re.match('Hello.*Demo', content, re.S)
    8 print(result)
    View Code
  • 相关阅读:
    键盘记录器,可截获到 QQ 的password
    《python源代码剖析》笔记 pythonm内存管理机制
    Unity 捕获IronPython脚本错误
    POJ 3020 Antenna Placement 最大匹配
    XCL-Charts画线图(Line Chart)
    android设置背景色为透明
    设计时属性文件
    Windows Mobile基础
    Wince 的CAB安装包
    惠普的 ipaq112 恢复出厂设置
  • 原文地址:https://www.cnblogs.com/Phantom3389/p/9130735.html
Copyright © 2020-2023  润新知