• Python的re模块


    Python的re模块

    1、    compile(pattern):创建模式对象

    import re

    pat = re.compile('A')

    m = pat.search('CBA')  

    #等价于re.search(‘A’,’CBA’)

    print(m)      

    #<_sre.SRE_Match object; span=(2, 3), match='A'>

    import re
    pat = re.compile('a')
    m = pat.search('CBA')
    print(m)     #没有匹配到,返回None

    2、    search(pattern,string):在字符串中寻找模式

    import re    
    m = re.search('asd','ASDasd')      
    print(m)     
    #<_sre.SRE_Match object; span=(3, 6), match='asd'>       

    上面的函数返回都可以在if条件语句中进行判断:

    If pat.search(‘asd’,’ASDasd’):

             Print(‘ok’)

    运行输出了‘ok’。

    3、    split(pattern,string):根据模式分割字符串,返回列表

    a、

    import re
    m=re.split(',','a,s,d,asd')    #以逗号为分界
    print(m)      #['a', 's', 'd', 'asd']

    b、

    import re
    pat = re.compile(',')
    m=pat.split('a,s,d,asd')
    print(m)      #['a', 's', 'd', 'asd']

    c、

    import re
    m = re.split('[,]+','a,s,d ,,,,,asd')
    #正则匹配:[,]+,后面说明
    print(m)     #['a', 's', 'd ', 'asd']

    d、

    import re
    m= re.split('[,]+','a,s,d,e, ,,,,,asd',maxsplit=2)
    #maxsplit最多分割次数
    print(m)   
    #['a', 's', 'd,e, ,,,,,asd']

    e、

    import re

    pat = re.compile('[,]+')

    m = pat.split('a,s,d,e, ,,,,,asd',maxsplit=2)

    print(m)   # ['a', 's', 'd,e, ,,,,,asd']

    4、    findall(pattern,string):列表形式返回匹配项

    import re

    c=re.findall('a','aASDaDSDa')

    print(c)         # ['a', 'a', 'a']

     

    import re

    pat = re.compile('a')

    c = pat.findall('aASDaDSDa')

    print(c)         # ['a', 'a', 'a']

     

    import re

    pat = re.compile('[A-Z]+')

    c = pat.findall('aASDaDSDa')

    print(c)         # ['ASD', 'DSD']

     

    import re

    pat = re.compile('[A-Z]')

    c = pat.findall('aASDaDSDa')

    print(c)         # ['A', 'S', 'D', 'D', 'S', 'D']

    import re

    pat = re.compile('[A-Za-z]+')

    #正则匹配:'[A-Za-z]+'匹配所有单词

    c = pat.findall('aASD aDSDa')

    print(c)         # ['aASD', 'aDSDa']

    import re

    pat = re.compile('[A-Za-z]')

    c = pat.findall('aASD aDSDa')

    print(c)  

    #['a', 'A', 'S', 'D', 'a', 'D', 'S', 'D', 'a']

    5、    sub(pat,repl,string):用repl替换pat匹配项

    import re

    c = re.sub('a','A','aASD aDSDa')

    print(c)   #AASD ADSDA

    import re

    pat = re.compile('a')

    c = pat.sub('A','aASD aDSDa')

    print(c)         # AASD ADSDA

    import re

    pat = re.compile(r'www.(.*)..{3}')

    '''

    Pythonstring前面加上‘r’,是为了告诉编辑器这个stringraw string,不要转译反斜杠‘’。

    例如, raw string中,是两个字符,n,而不会转译为换行符。

    由于正则表达式和会有冲突,因此,当一个字符串使用了正则表达式后,最好在前面加上‘r’。

    于大多数编程语言相同,正则表达式里用“”作为转义字符,这就可能造成反斜杠困扰。

    假如你需要匹配文本中的字符“”,那么使用编程语言表示的正则表达式里将需要4个反斜杠“\\:

    前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。

    Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r\”表示。

    同样,匹配一个数字的\d可以写成rd”。

    有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。

    最好记住这句话:

    当一个字符串使用了正则表达式后,最好在前面加上‘r’,这样你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观

    '''

    ret = pat.match('www.dxy.com').group(1)

    print(ret)       # dxy

    a=re.sub(r'www.(.*)..{3}',r'1','hello,www.dxy.com')

    print(a)         # hello,dxy

    b = pat.sub(r'1','hello,www.dxy.com')

    print(b)        # hello,dxy

    '''

    r'1'是第一组的意思

    通过正则匹配找到符合规则的“www.dxy.com”,取得组1字符串去替换整个匹配

    '''

     

     

    pat = re.compile(r'(w+)(w+)')

    s = 'hello world! hello hz!'

    d = pat.findall('hello world ! hello hz !')

    print(d)  

    # [('hell', 'o'), ('worl', 'd'), ('hell', 'o'), ('h', 'z')]

    c=pat.sub(r'21',s)

    print(c)   # ohell dworl! ohell zh!

    '''

    通过正则得到组1hell),组2o),再通过sub去替换。即组1替换组2,组2替换组1,调换位置

    '''

    6、    escape(string):对字符串里面的特殊字符串进行转义

    import re

    a=re.escape('www.dxy.com')

    print(a)   #www.dxy.com

    7、group:获取子模式(组)的匹配项

    上面的函数中,只有match、search有group方法,其他的函数没有。

    import re

    pat = re.compile(r'www.(.*).(.*)')  

    #用()表示1个组,2个组

    m = pat.match('www.dxy.com')

    print(m.group())

    #默认为0,表示匹配整个字符串。结果:www.dxy.com

    print(m.group(1))

    #返回给定组1匹配的字符串。结果:dxy

    print(m.group(2))

    #返回给定组2匹配的字符串。结果:com

    8、    start:给定组匹配项的开始位置

    import re

    pat = re.compile(r'www.(.*).(.*)')

    m = pat.match('www.dxy.com')

    print(m.start(2)) #组2开始的索引,结果:8

    9、end:给定组匹配项的结束位置

    import re

    pat = re.compile(r'www.(.*).(.*)')

    m = pat.match('www.dxy.com')

    print(m.end(2))  #组2结束的索引。结果:11

    10、span:给定组匹配项的开始结束位置

    import re

    pat = re.compile(r'www.(.*).(.*)')

    m = pat.match('www.dxy.com')

    print(m.span(2))  

    #组2的开始、结束的索引。结果为(8,11)

     

     

  • 相关阅读:
    【本人译作推荐】Windows 8应用开发:C#和XAML卷(原名:Building Windows 8 Apps with C# and XAML)
    ODAC的安装以及Entity Framework for Oracle 基本配置
    ExtJs API 下载以及部署
    ArcGis(01)——地图切片以及发布底图服务
    ubuntu下安装Vmare Workstation,并安装mac补丁
    sencha app build 到 Capturing theme image不执行
    Ext Sencha Cmd 6 环境安装
    SqlServer CTE 递归查询 Oracle递归查询
    ibatis.net调用oracle存储过返回游标SYS_REFCURSOR结果集
    SpringMVC从入门到精通之第四章
  • 原文地址:https://www.cnblogs.com/xshan/p/7811177.html
Copyright © 2020-2023  润新知