zoukankan      html  css  js  c++  java
  • python正则

    python中的正则表达式

    一、python中的转义字符

      正则表达式使用反斜杠""来表示特殊形式或用于转义字符,这里和python的基本语法有冲突所以用'\\'来表示正则表达式中的""。

    二、正则表达式的常见元字符

    元字符:是正则表达式中具有特殊含义的转义字符,用来规定位于元字符前面的字符,在目标对象中出现的模式。

    .    匹配除换行符以外的任意字符
    ^    匹配字符串的开始
    $    匹配字符串的结束
    []   用来匹配一个指定的字符类别
    ?   对于前一个字符字符重复0次到1次
    *    对于前一个字符重复0次到无穷次
    {}   对于前一个字符重复m次
    {m,n} 对前一个字符重复为m到n次
    d   匹配数字,相当于[0-9]
    D   匹配任何非数字字符,相当于[^0-9]
    s   匹配任意的空白符,相当于[ fv]
    S   匹配任何非空白字符,相当于[^ fv]
    w   匹配任何字母数字字符,相当于[a-zA-Z0-9_]
    W   匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]
       匹配单词的开始或结束
    

     三、正则表达式模块导入

    3.1、查看正则表达式模块的方法

    >>>def(re)

    ['DEBUG', 'DOTALL', 'I', 'IGNORECASE', 'L', 'LOCALE', 'M', 'MULTILINE', 'S', 'Scanner', 'T', 'TEMPLATE', 'U', 'UNICODE', 'VERBOSE', 'X', '_MAXCACHE', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__version__', '_alphanum', '_cache', '_cache_repl', '_compile', '_compile_repl', '_expand', '_pattern_type', '_pickle', '_subx', 'compile', 'copy_reg', 'error', 'escape', 'findall', 'finditer', 'match', 'purge', 'search', 'split', 'sre_compile', 'sre_parse', 'sub', 'subn', 'sys', 'template']

    3.2、导入正则表达式

      import re

    四、常用的正则表达式处理函数

    4.1、re.match

      尝试从字符串的开始匹配正则,也就是匹配第一个单词

    re.match(pattern, string, flags=0)
        第一个参数:规则
        第二个参数:表示要匹配的字符串
        第三个参数:标致位,用于控制正则表达式的匹配方式
    

    匹配成功re.match方法返回一个匹配对象,否则返回None

    我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式 

    实例1:

    import re
    print(re.match('www', 'www.runoob.com').span())  # 在起始位置匹配
    print(re.match('www', 'www.runoob.com')) print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

     结果:

    (0, 3)#>=0&&<3
    <_sre.SRE_Match object; span=(0, 3), match='www'> None

    4.2、search方法

      re.search扫描整个字符串并返回第一个成功的匹配

    search(pattern, string, flags=0)
        第一个参数:规则
        第二个参数:表示要匹配的字符串
        第三个参数:标致位,用于控制正则表达式的匹配方式
    

     re.search匹配成功返回一个匹配对象,否则返回None

    我们可以使用group(num)或者groups()匹配对象函数来获取匹配表达式 

    实例:

    import re
    print(re.search('www', 'www.runoob.com').span())  # 在起始位置匹配
    print(re.search('com', 'www.runoob.com').span())         # 不在起始位置匹配
    

     结果:

    (0, 3)
    (11, 14)
    

     4.3、re.match和re.search的区别

    re.match只匹配字符串的开始,如果字符串的开始不符合正则表达式,则匹配失败,函数返回None;re.search匹配整个字符串直接找到第一个匹配的

    实例:

    import re
    
    line = "Cats are smarter than dogs";
    
    matchObj = re.match( r'dogs', line, re.M|re.I)
    if matchObj:
       print "match --> matchObj.group() : ", matchObj.group()
    else:
       print "No match!!"
    
    matchObj = re.search( r'dogs', line, re.M|re.I)
    if matchObj:
       print "search --> matchObj.group() : ", matchObj.group()
    else:
       print "No match!!"
    

     结果:

    No match!!
    search --> matchObj.group() :  dogs
    

     4.4、re.findall

    re.findall 在目标字符串中查找符合规则的字符串

    findall(pattern, string, flags=0)
       第一个参数:规则
       第二个参数:目标字符串
       但三个参数:后面还可以跟一个规则选择项
    

     实例:

    import re
    
    print(re.findall(r'abc',"abc kjhqwkhabcednk abc dsd"))
    print(re.findall(r'(abc)',"abc kjhqwkhabcednk abc dsd"))
    print(re.findall(r'abc',"abc kjhqwkhabcednk abc dsd"))
    print(re.findall(r'[abc]',"abc kjhqwkhabcednk abc dsd"))

     结果:

    ['abc', 'abc', 'abc']
    ['abc', 'abc', 'abc']
    ['abc', 'abc']
    ['a', 'b', 'c', 'a', 'b', 'c', 'a', 'b', 'c']
    

    4.5、re.sub 用于替换字符串的匹配项

    sub(pattern, repl, string, count=0)
        第一个参数:规则
        第二个参数:替换后的字符串
        第三个参数:字符串
        第四个参数:替换个数。默认为0,表示每个匹配项都替换
    

    例子:

    s = "hello python glad to see you"
    print(re.sub(r's','-',s))#s任意的空白字符
    
    s = "hello python glad to see you"
    print(re.sub(r's','-',s,3))#s任意的空白字符,3表示替换3次
    

     结果:

    hello-python-glad-to-see-you
    hello-python-glad-to see you
    

    4.6、re.split 用于分割字符串

    split(pattern, string, maxsplit=0)
        第一个参数:规则
        第二个参数:字符串
        第三个参数:最大分割字符串,默认为0,表示每个匹配项都分割
    

     实例:

    s = "hello python glad to see you"
    print(re.split(r's',s))
    print(re.split(r's.',s))
    print(re.split(r's.*',s))
    print(re.split(r's',s,3))
    

     结果:

    ['hello', 'python', 'glad', 'to', 'see', 'you']
    ['hello', 'ython', 'lad', 'o', 'ee', 'ou']
    ['hello', '']
    ['hello', 'python', 'glad', 'to see you']
    

    4.7、re.complie 可以把正则表达式编译成一个正则对象

    实例:

    r1 = findall('d+',"eqwe132qewqe2545qeqw5654")
    print(r1)
    
    r2 = re.compile('d+')
    #compile经过编译生成了对象
    r3 = r2.findall("eqwe132qewqe2545qeqw5654") 
    print(r3)
    

     结果:

    ['132','2545','5654']
    
    ['132','2545','5654']
    
  • 相关阅读:
    图片无缝横向滚动
    MySQL命令小结
    Git初级
    VS2012 创建的entityframework 4.1版本
    IE10 下系统出现Unable to get property 'PageRequestManager' of undefined or null reference错误
    MIME Types
    不兼容的数据类型
    使用Lambda .map函数将入参List转换至其它List
    MySQL中那种数据类型是只有true和false的
    ELK Stack
  • 原文地址:https://www.cnblogs.com/mosson0816/p/5508371.html
Copyright © 2011-2022 走看看