• Python笔记(十):正则表达式


    正则表达式对比工具

    https://pan.baidu.com/s/1XIPyF1vFSj5PACPx9zW8_g

    (一)      正则表达式符号和特殊字符

    符号

    说明

    示例

    |

    re1|re2,匹配re1或re2

     .

    匹配任何字符( 除外)

    ^

    匹配字符串开始部分

    ^ab.*

    以ab开始的字符串,匹配ab123、ababc等等

    $

    匹配字符串结束部分

    .*123$

    以123结束的字符串,匹配ab123、测试123等等

    *

    匹配0次或多次前面的正则表达式

    .*

    匹配0次或多次前面的 .

    +

    匹配1次或多次前面的正则表达式

    ?

    匹配0次或1次前面的正则表达式

    {n}

    匹配n次前面的正则表达式

    .{5}

    {m,n}

    匹配M到N次前面的正则表达式

    .{1,10}

     

    […]

    匹配[]里的任一字符

    [abc]d

    匹配 ad、bd、cd

    [x-y]

    匹配范围内的任一字符

    [a-c]d:匹配 ad、bd、cd

    [0-9]d:匹配0d、1d、2d、3d等

    [^…]

    不匹配[]里的任一字符

    [^a-c]d: 不匹配 ad、bd、cd

     

    (…)

    将正则表达式封闭为一个组

    例如:[a-b][a-b] :只匹配aa、ab等

    ([a-b][a-b])+:匹配aaaa、abab等.另外可以用这个()来提取数据

     

    符号

    说明

    示例

    d

    匹配任一数字,和[0-9]是一样的,D则不匹配任何数字

    Ad: 匹配A1、A2等

    w

    匹配任一数字、字母,和[A-Za-z0-9]是一样的,W则相反

     

     

    s

    匹配任一空格字符,S

    则相反

    hellosword:匹配hello word

    ..

    将后一个字符按字面意义匹配,不匹配特殊含义

    ?:匹配?

    \d:匹配d

    

     

    匹配任何单词边界(B

    则相反)

    例如:字符串 ab the Htherr

    the: 能匹配到2个 the

    the:只匹配第一个 the

    BtheB:只匹配第二个 the

    A

     

    匹配字符串开始部分, 则字符串结束部分

    参照^ 和$

     

    (二)      贪婪模式和非贪婪模式

    贪婪模式:尽可能的匹配

    非贪婪模式:匹配到第一个结果后就结束匹配。在*、+、?、{}后面加一个?就是非贪婪模式。(*|+|?|{})?

    看下面2张图就清楚了(蓝色背景表示匹配的内容)

    第一张图(贪婪模式):匹配到第一</div>后还会继续向右匹配。(在内容和正则表达式匹配的情况下,尽可能的匹配最长字符串)

    第二张图(非贪婪模式):匹配到第一个</div>后就结束匹配了。(在内容和正则表达式匹配的情况下,匹配到第一个结果后就结束匹配)

     

     

    (三)      re模块

    函数/方法

    说明

    re.compile(pattern, flags=0)

    (预编译)将正则表达式编译为对象(不是必须的,不过一般是会预编译)

    实际应用中:下面2种方式都是可以用的

    the_str=''

    第一:
    href_regx= re.compile('<div.*</div>')
    href_regx.match(the_str)

    第二:
    re.match('<div.*</div>',the_str)

    第一种是调用正则表达式对象的match()方法。

    第二种写法是调用re模块的match()函数

    match(pattern, string)

    Pattern:正则表达式

    String:字符串

    匹配成功,返回字符串,失败则返回None。

    预编译后的正则表达式对象则只需要传str就行了(因为它本身就是pattern对象

    search(pattern, string)

    Pattern:正则表达式

    String:字符串

    返回第一个匹配内容,没有匹配则返回None

    findall(pattern, string)

     

    以列表形式返回所有匹配的内容

    finditer(pattern, string)

    返回所有匹配的内容,以迭代器的形式

    split(pattern, string)

    Pattern匹配的内容作为分隔符,split将字符串分割为列表并返回

     

    flags参数

    说明

    re.I  
    re.IGNORECASE

     

    不区分大小写

    re.M

    re.MULTILINE

    匹配行的开始和结束部分,而不是严格匹配字符串本身的开始、结束部分

    re.S

    re.DOTALL)

     

    . (点号)可以匹配

    使用flags参数的时候,不清楚传第几个参数的话,最好先去看下方法(函数)的实现代码。或者直接指定(flags= xxx)

    (四)      re模块示例

     1 import re
     2 the_str='<div id="hd_info"></div></div></div>'
     3 href_regx= re.compile('<div.*</div>')
     4 print('match()示例:',href_regx.match(the_str))
     5 print('match()示例:',re.match('<div.*</div>',the_str))
     6 print('search()示例:',re.search('/div>',the_str))
     7 
     8 print('findall()示例:',re.findall('/div>',the_str))
     9 print('finditer()示例:',re.finditer('/div>',the_str))
    10 for i in re.finditer('/div>',the_str):
    11     print('迭代finditer()返回值:',i)
    12 
    13 print('split()示例:',re.split('/.',the_str,re.DOTALL))

    (五)      正则表达式实际应用

     匹配电信手机号

    133、149、153、173、177、180、181、189、199开头的11位数字

    正则表达式:1(39|49|53|[7][37]|[8][019]|99)[0-9]{8}

     匹配a标签开始 href属性值 (<a href='' ) 

  • 相关阅读:
    2017年第八届蓝桥杯C/C++ C组国赛 —— 第一题:哥德巴赫分解
    Tree Walk Aizu
    Tree Walk Aizu
    Binary Trees Aizu
    有效的括号
    划分整数
    最大子矩阵和
    最大子段和
    最长上升子序列
    合唱队形
  • 原文地址:https://www.cnblogs.com/simple-free/p/8876455.html
Copyright © 2020-2023  润新知