• python正则表达式的基本使用


    1.正则表达式库文件:import re

    2.正则表达式常用符号

    . :匹配任意字符,'
    '除外
    a = 'zjw1324399'
    b = re.findall('z.',a)
    '''点号就相当于一个占位符'''
    print(b)
    
    Console:
    zj

    * :匹配前一个字符0次或无限次

    a = 'zzzjw1324399'
    b = re.findall('z*',a)
    print(b)
    
    Console:
    ['zzz', '', '', '', '', '', '', '', '', '', '']

    ? :  匹配前一个字符0次或一次

    a = 'zzzjw1324399'
    b = re.findall('z?',a)
    print(b)
    
    Console:
    ['z', 'z', 'z', '', '', '', '', '', '', '', '', '', '']

    .* :  贪心算法

    a = 'qwerxxixxxxlovexxxxyouxxabcd'
    b = re.findall('xx.*xx',a)
    print(b)
    
    Console:
    ['xxixxxxlovexxxxyouxx']

    .*?: 非贪心算法

    a = 'qwerxxixxxxlovexxxxyouxxabcd'
    b = re.findall('xx.*?xx',a)
    print(b)
    
    Console:
    ['xxixx', 'xxlovexx', 'xxyouxx']

    () :括号内的数据作为结果返回

    a = 'qwerxxixxxxlovexxxxyouxxabcd'
    b = re.findall('xx(.*?)xx',a)
    print(b)
    for every in b:
        print(every)
    
    Console:
    ['i', 'love', 'you']
    i
    love
    you

    d+ :匹配纯数字

    a = '''12345shangshandalaohu56789laohumeidadao'''
    b = re.findall('(d+)',a)
    print(b)
    
    Console:
    ['12345', '56789']

    然而值得注意的是以xx作为搜索符号,则所有的字符都必须有自己的搜索符,已经被检索过的搜索符并不算在下一个检索范围内

    如:

    a = 'qwerxxixxlovexxyouxxabcd'
    b = re.findall('xx(.*?)xx',a)
    '''love两旁的xx分别是i和you的后缀和前驱,故love并没有被检索到'''
    print(b)
    
    Console:
    ['i', 'you']

    若字符存在换行符,如:

    a = '''qwerxxi
    xxabcdxxlovexxabcdxxyouxxabcd'''
    b = re.findall('xx(.*?)xx',a)
    print(b)
    
    Console:
    ['abcd', 'abcd']

    若想忽略换行符的,看整体的字符串则需要方法re.S(使 . 的作用域包含 )

    a = '''qwerxxi
    xxabcdxxlovexxabcdxxyouxxabcd'''
    b = re.findall('xx(.*?)xx',a,re.S)
    print(b)
    
    Console:
    ['i
    ', 'love', 'you']

    3.正则表达式常用方法

    findall :匹配所有符合规律的内容

    Search :匹配并提取第一个符合规律的内容返回第一个正则表达式对象

    a = '''qwerxxixxabcdxxlovexxabcdxxyouxxabcd'''
    b = re.search('xx(.*?)xxabcdxx(.*?)xx',a).group(1)
    c = re.findall('xx(.*?)xxabcdxx(.*?)xx',a)
    print(b)
    print(c[0][1])
    '''0代表第一种相似的情况,1等同于.group(2)'''
    
    Console:
    i
    love
    a = '''qwerxxixxabcdxxlovexxabcdxxyouxxabcd'''
    b = re.search('xx(.*?)xxabcdxx(.*?)xx',a).group(2)
    '''group(3)会报错,因为group(n)代表匹配的括号数n'''
    print(b) Console: love

    Sub :替换符合规律的内容,返回替换后的值

    a = '''iloveyou'''
    hate = 'hate'
    b = re.sub('i(.*?)you','i%syou'%hate,a)
    '''%s可替换为%d代表int类型,可直接写数字'''
    print(b)
    
    Console:
    ihateyou
  • 相关阅读:
    捡来的一个大数模版。很好用
    小探catlan数
    hdu1060数学题求幂最左边的数
    食物相克
    工作 瓶颈 思路问题
    从用户态open到内核驱动实现
    内核代码 结构
    I2C原理
    asm
    man 2 3 5 普通命令(1) 函数库(3)
  • 原文地址:https://www.cnblogs.com/zjw1324399/p/14328111.html
Copyright © 2020-2023  润新知