zoukankan      html  css  js  c++  java
  • Python学习 :正则表达式

    正则表达式

    python 使用正则表达式(re)来进行匹配引擎搜索

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”

    关于正则表达式,必须先学会它的元字符

    元字符 : ^  $  *  +  ?  { }  [ ]  |  ( ) 

    .  匹配除 (换行符)以外的任何字符,若指定flag DOTALL,则匹配任意字符,包括换行

    s = re.findall('b...u', 'www.baidu.com www')
    >>> ['baidu']
    

    ^  匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a"," abc eee",flags=re.MULTILINE)

    s = re.findall('^w.w', 'www.baidu.com wWw')
    >>> ['www']
    

    $  匹配字符结尾,或e.search("foo$","bfoo sdfsf",flags=re.MULTILINE).group()也可以

    s = re.findall('w.w$', 'www.baidu.com wWw')
    >>> ['wWw']
    

    *  匹配*号前的字符0次或多次

    s = re.findall('abc*', 'abccccccc')
    >>> ['abcccccc']
    s = re.findall('abc*', 'ab')
    >>> ['ab']
    

    +   匹配前一个字符1次或多次

    s = re.findall('abc+', 'abccccccc')
    >>> ['abcccccc']
    

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

    s = re.findall('abc?', 'abccccccc')
    >>> ['abc']
    

    {n}  匹配前一个字符n次,即前一个字符至少出现n次

    s = re.findall('abc{2}', 'abccccccc')
    >>> ['abcc']
    

    {n,m}  匹配前一个字符n到m次

    s = re.findall('abc{2,3}', 'abccccccc')
    >>> ['abccc']
    

    |  匹配|左或|右的字符

    s = re.findall('abc|ABC', 'abcABC')
    >>> ['abc', 'ABC']
    

    ()   提取括号中的内容

    s = re.findall('(bai)', 'www.baidu.com')
    >>> ['bai']
    

    [ ] 字符集:1、[ab] 取a或b 2、字符集里的符号没有特殊的意义 3、尖角号^取反 4、选择出某种元素

    # 1、[] 里面的元素取其一
    s = re.findall('[aid]', 'www.baidu.com')
    >>>['a', 'i','d']
    # 2、消除符号的特殊意义
    s = re.findall('[*]', 'abccccccc*')
    >>>['*']
    # 3、取反
    s = re.findall('[^abc]', 'abcABC')
    >>>['A', 'B', 'C']
    # 4、选择元素(数字或字母)
    s = re.findall('[a-z]', 'ab123c41d2ABeC')
    >>>['a', 'b', 'c', 'd', 'e']
    

      反斜杠后边跟元字符去除特殊功能,反斜杠后边跟普通字符实现特殊功能

     

    通用字符

    A    只从字符开头匹配,re.search("Aabc","alexabc") 是匹配不到的
        匹配字符结尾,同$
    D    匹配非数字
    S    匹配任何非空白字符
    W    匹配非[A-Za-z0-9]
    d    匹配数字0-9,十进制数字
    w    匹配[A-Za-z0-9],匹配任一字母、数字、下划线
    s    匹配空白字符、	、
    、
     , re.search("s+","ab	c1
    3").group() 结果 '	'
    

    模式修正符,一般放在最后位置

    I  re.I   不区分大小写

    M re.M 多行匹配,改变'^'和'$'的行为

    S re.S  点任意匹配模式,改变'.'的行为

    常用的匹配语法

    re.findall()  # 完全匹配,把所有匹配到的字符放到以列表中的元素返回
    re.findall('com','www.baidu.com map.baidu.com')
    >>> ['com', 'com']
    
    re.match()    # 从头开始匹配
    re.match('com','www.baidu.com map.baidu.com')
    >>> None
    
    re.search()   # 搜索匹配,仅返回一个结果;通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。
    re.search('com','www.baidu.com map.baidu.com').group()
    >>> com
    
    re.split()    # 按照能够匹配的子串将字符串分割后返回列表。maxsplit用于指定最大分割次数,不指定使用默认值0将全部分割
    re.split('d','www.1baidu2.3com',2) # 默认为0,即全部分隔;指定次数后只分隔两次
    >>> ['www.', 'baidu', '.3com']
    re.split(' ','www.baidu.com map.baidu.com') # 分隔空格
    >>> ['www.baidu.com', 'map.baidu.com']
    
    re.sub()      # 匹配字符并进行替换
    re.sub('d','ai','www.b1du.com ',1) # 替换一次
    >>> www.baidu.com
    re.subn()     # 与 sub 函数完全一致,只不过其返回值是包括两个元素的元组:(new_string, number);第一个返回值 new_string 为sub 函数的结果,第二个 number 为匹配及替换的次数。
    ret=re.subn('d','ai','www.b1du.com map.b2du.com',2) # 替换两次
    >>> ('www.baidu.com map.baidu.com', 2)
    

    re 模块的两种匹配模式

    贪婪模式:尽可能多的去匹配

    惰性模式:尽可能少的去匹配(后面加?号来限制)

  • 相关阅读:
    “二柱子四则运算”终结版
    “睡眠猴子”团队项目及成员介绍
    最大联通子数组的和
    构建之法阅读笔记04
    构建之法阅读笔记03
    “进度条”博客——第五周
    构建之法阅读笔记02
    构建之法阅读笔记01
    “进度条”博客——第四周
    课后实验6--二维数组最大联通子数组的和
  • 原文地址:https://www.cnblogs.com/ArticleYeung/p/9890884.html
Copyright © 2011-2022 走看看