zoukankan      html  css  js  c++  java
  • python re模块与正则表达式

    首先要先继承re模块: import re

    re.findall() 方法 # 返回值为列表

    w 表示一个字符,为数字,字母,下滑线之一,  W匹配任意非数字,字母,下划线

    print(re.findall('w3w','abc3dafg375983_'))    #   输出结果为: ['c3d', 'g37', '83_']

    print(re.findall('2W','abc2_ 2 3| 2|'))   #    输出结果为: ['2 ', '2|']

     

    s 表示匹配 任意空白字符(       f 分别表示:水平制表符,移动到下一个tab的位置; 换行符; 回车; 换页)  S匹配任意 非空字符

    print(re.findall('2s','abc2f_ 2 3| 2 '))   #  输出结果为 ['2x0c', '2 ', '2 '];

    若将代码改为: print(re.findall('2s','abc2\f_ 2 3| 2\t')) ,则 输出结果为: ['2 ']

     

    d 匹配任意数字(0-9),  D匹配任意非数字

    print(re.findall('d','abc3dafg375983_'))  #输出结果为: ['3', '3', '7', '5', '9', '8', '3']

     print(re.findall('D','abc3dafg375983_'))  #输出结果为: ['a', 'b', 'c', 'd', 'a', 'f', 'g', '_']

     

    Ax 匹配字符串开始(x表示需要找的字符串),如字符串是以要找的字符串开头,则返回这个字符串,若不是则结束匹配

     print(re.findall('Aa','abc3dafg375983_'))  #输出结果为: ['a']

     

    x 匹配字符串结束(x表示需要找的字符串)

     print(re.findall('3','abc3dafg375983_'))  #输出结果为: [ ] 表示空列表,表示字符串不是以3结尾

     

    ^  字符串开头匹配(判段开头是否为要找的字符串,并返回值,若不是,则结束寻找)

    $  从末尾开始匹配(判段结尾是否为要找的字符串,并返回值,若不是,则结束寻找)

     print(re.findall('^c3','c3abc3dafg37c3983_'))     输出结果为: ['c3']

     print(re.findall('c3$','c3abc3dafg37c398c3_'))  输出结果为: [ ]

     

    . :匹配除换行符之外的任意字符, 加上flag:re.DOTALL 即可匹配换行符

    print(re.findall('a.c','abc a c a|ca#ckfaabbc'))  输出结果为:['abc', 'a c', 'a|c', 'a#c']

     

    [...] :表示匹配一组字符中的一个字符

    print(re.findall('[b.]','abc a c a|ca#ckfa.abbc'))  输出结果为: ['b', '.', 'b', 'b']

    print(re.findall('a[a-zA-Z]c','aBcfagchka|c',re.DOTALL))  输出结果为: ['aBc', 'agc']

    重复匹配:

    ? :表示在?左边的字符出现0次或1次

    print(re.findall('ab?','a ab abb abc acf b ab a21b'))  #  在此情况下表示 , b出现一次或0次的字符串,结果为: ['a', 'ab', 'ab', 'ab', 'a', 'ab', 'a']

     

    * :0次到无穷多次

    print(re.findall('ab*','aababbaaabbb'))  #输出结果为: ['a', 'ab', 'abb', 'a', 'a', 'abbb']

     

    + :1次或无穷多次

    print(re.findall('ab+','a ab abb bb abbb aaabbb'))  # 输出结果为: ['ab', 'abb', 'abbb', 'abbb']

     

    .* :贪婪匹配,尽可能多的吞噬字符

     print(re.findall('a.*c','aasfakfipgld csagsdpp cas'))   # 输出结果为: ['aasfakfipgld csagsdpp c']

     .*? : 非贪婪匹配,尽可能少的吞噬字符

     print(re.findall('a.*?c','aasfakfipgld csagsdpp cas'))   # 输出结果为: ['aasfakfipgldc', 'agsdpp c']

     

    | :表示或者

    print(re.findall('yang|huang','yang is a boy huang is a girl'))  #输出结果为: ['yang', 'huang']

     

     () : 表示分组,默认情况下只保留括号内的数据, 在括号内加入?:则会保留完整的 

     

    print(re.findall('email.:w{3,}@w+.(?:cn|com|edu|org)','email1:378533872@qq.com email2:333312312@163.com eamil3:alexsb123@gmail.com'))

    输出结果为: ['378533872@qq.cn', '333312312@163.com', 'alexsb123@gmail.com']

    re.I   #  忽略大小写

    print(re.findall('alex','aLex is Alex is alExandaleX',re.I))  # 输出结果为:['aLex', 'Alex', 'alEx', 'aleX']

    re.M  #忽略换行符  

    msg="""

    ahfquqfqioiyang

    sfahsifpofayang

    fdi352526yang

    # """

    print(re.findall('yang$',msg,re.M))    #  输出结果为: ['yang','yang','yang']

    re.search()方法   找到一个即停止

    print(re.search('alex','alex is alex is alex'))  #  输出结果为: <_sre.SRE_Match object; span=(0, 4), match='alex'>

    re.match()方法  找开头,没有找到则结束

    print(re.match('alex','alex is alex is alex'))  #  输出结果为: <_sre.SRE_Match object; span=(0, 4), match='alex'>

     从上述代码可以看出search方法与match方法返回结果比较相似

    小练习:找到以下字符串中所有的数字(正数,负数,小数):

    msg="1-2*(60+(-40.35/5)-(-4*3))"

    代码为:
    print(re.findall('D?(-?d+.?d*)',msg))
    结果为:
    ['1', '2', '60', '-40.35', '5', '-4', '3']


  • 相关阅读:
    高德地图API,获取和设置zoom级别和中心点
    高德地图API注册使用教程简答演示
    HTML5 视频流行插件之video.js
    audio实现自定义音频播放器
    HTML5 audio API事件
    HTML5之audio属性
    GitLab的安装及使用教程
    设计模式六大原则(PHP)
    面向对象设计
    自定义的异常类
  • 原文地址:https://www.cnblogs.com/yang220/p/yang5.html
Copyright © 2011-2022 走看看