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

    re方法

    re.search()

    re.search(pattern,string,flags=0)
    例:re.search(r'love','I love you')

    re.findall()

    返回一个符合pattern的全部字符的list。

    re.compile()

    p=re.compile(r'[a-z]')
    res=re.findall(p,'iLadfaww')
    print(res)
    
    ['i', 'a', 'd', 'f', 'a', 'w', 'w']
    p=re.compile(r'[a-z]+',re.IGNORECASE)
    res=p.search('ADSwqefS',2,5)#后两个参数表示范围
    print(res)
    
    <_sre.SRE_Match object; span=(2, 5), match='Swq'>
    

    代码

    p=re.compile(r'(Love) (You)')
    res=p.search('I Love You')
    print(res.group(0))
    print(res.group(1))
    print(res.group(2))
    
    print(res.start())
    print(res.end())
    print(res.span())
    
    Love You
    Love
    You
    2
    10
    (2, 10)

    编译标志

    编译标志

    编译标志有两个名字:完整名和简写名

    1.ASCII,A:使得w,,sd只能匹配ASCII字符
    2.DOTALL,S:使得.匹配任何符号,包括换行符
    3.IGNORECASE,I:不区分大小写
    4.LOCALE,L:支持当前的语言,区域设置
    5.MULTILINE,M:多行匹配,影响^$
    6.VERBOSE,X :启用详细的正则表达式

    正则Pattern

    Python3正则表达式特殊符号及用法

    d:匹配数字
    D:与d相反,相当于[^0-9]

    s:匹配任何空白字符(包含空格,换行符,制表符等),相当于[ fv]
    S:与上相反

    w匹配任何单词字符
    W与上相反

    匹配单词的开始或者结束。在字符类中可表示空格
    B与上相反

    .:匹配除换行符以外的任何字符

    |:或

    *:匹配前面的表达式0次或者而多次=={0,}
    +:匹配前面的表达式1次或者多次=={1,}
    ?:匹配前面的表达式0次或者1次=={0,1}

    :
    1.转义字符
    2.类似于d这种用途
    3.引用序号对应的子组所对应的字符串(两位数)
    r'(ABC)(.com)2'匹配的就是'ABC.com.com’
    4.(三位数,首位可为0)表示八进制数所代表的ASCII码

    [..]:字符类,匹配所包含的任意一个字符

    ^:
    1.匹配字符串的开始位置
    2.如果设置了re.MULTILINE标志,则表示换行符之后的位置
    3.[^..]取反,只能放在最开头。若不在最开头,则表示^本身。

    %
    1.匹配字符串的结束位置,
    2.如果设置了re.MULTILINE标志,则表示换行符之前的位置

    {M,N}:匹配前面的内容M~N次

    [a-z]:匹配a-z

    ab{3}z:匹配abbbc

    ab{3,10}c:匹配a(3-10个)bc

    零宽断言

     ^ $ A  等用于指定位置,这个位置应满足的一定的条件(即断言),称为零宽断言。

    前向肯定断言

    (?=exp)

    abc(?=.com)只会匹配后面紧跟着.comabc

    前向否定断言

    (?!exp)

    后向肯定断言

    (?<=exp)

    例:(?<=abc).com只会匹配前面为abc.com

    后向否定断言

    (?<!exp)

    贪婪与非贪婪

    默认是贪婪模式(在符合条件下尽可能多的匹配):

    res=re.search(r'ABC{2,8}','ABCCCCCC')
    print(res)
    
    <_sre.SRE_Match object; span=(0, 8), match='ABCCCCCC'>

    可以利用?变为非贪婪模式

    res=re.search(r'ABC{2,8}?','ABCCCCCC')
    print(res)
    
    <_sre.SRE_Match object; span=(0, 4), match='ABCC'>

    捕获

    使用(....)会捕获其中内容

    使用(?:...)不会捕获其中内容

    例子

    匹配ip地址

    res=re.search(r'((dd|d|1dd|2[0-4]d|25[0-5]).){3}((dd|d|1dd|2[0-4]d|25[0-5]))','2.1.1.1')

    相关博客:Python3如何优雅地使用正则表达式

  • 相关阅读:
    【Learning】积性函数前缀和——洲阁筛(min_25写法)
    GDOI2018记录
    最近公共祖先(一道题目)
    Counting
    【BZOJ4872】【Shoi2017】分手是祝愿
    【BZOJ2654】tree
    数学竞赛
    A
    【bzoj 3131】[Sdoi2013]淘金
    【Never Stop】联赛集训记录
  • 原文地址:https://www.cnblogs.com/fei-hsueh/p/6106286.html
Copyright © 2011-2022 走看看