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

    模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

    复习一下基本的正则表达式吧

     .:匹配除了换行符以为的任意单个字符


     *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式


    +:匹配位于+之前的一个或者多个字符


     |:匹配位于|之前或者之后的字符


     ^:匹配行首


     $:匹配行尾


     ?:匹配位于?之前的零个或者一个字符,不匹配多个字符


     :表示 之后的为转义字符


     []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字


     ():将位于()之内的的内容当作一个整体


     {}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)


     python中以开头的元字符:

     
    转义字符 含义
     匹配单词头或者单词尾
    B 和含义相反
    d 匹配任何数字
    D 和d含义相反,匹配任何非数字
    s 匹配任何空白字符
    S 和s含义相反,匹配任何非空白字符
    w 匹配任何字母,数字,下划线
    W 匹配任何非字母,数字,下划线

     

    匹配的标志和含义

    标志 含义
    re.I 忽略大小写
    re.L 根据本地设置而更改w,W,,B,s,S的匹配内容
    re.M 
    多行匹配模式
    re.S 使“.”元字符匹配换行符
    re.U 匹配Unicode字符
    re.X 忽略需要匹配模式中的空格,并且可以使用"#"号注释

    文本内容(提取linux下的passwd文件)

    1 man:x:6:12:man:/var/cache/man:/bin/nologin
    View Code

    re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.

    findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表

    search():搜索整个字符串,返回对象实例

    match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例

     1 lovelinux@LoveLinux:~/py/boke$ cat text 
     2 man:x:6:12:man:/var/cache/man:/bin/sh
     3 lovelinux@LoveLinux:~/py/boke$ cat test.py
     4 #/usr/bin/env python
     5 #coding:utf-8
     6 import re
     7 with open('text','r') as txt:
     8     f = txt.read()
     9     print re.match('bin',f)
    10     print re.search('bin',f).end()    
    11 lovelinux@LoveLinux:~/py/boke$ python test.py 
    12 None
    13 34
    14 lovelinux@LoveLinux:~/py/boke$ vim test.py
    15 lovelinux@LoveLinux:~/py/boke$ python test.py 
    16 None
    17 <_sre.SRE_Match object at 0x7f12fc9f9ed0>
    View Code

     search()返回是对象实例有2个方法,

    start():返回记录匹配到字符的开始索引 

    end():返回记录匹配到字符的结束索引

     1 lovelinux@LoveLinux:~/py/boke$ python test.py 
     2 None
     3 31
     4 34
     5 lovelinux@LoveLinux:~/py/boke$ cat test.py 
     6 #/usr/bin/env python
     7 #coding:utf-8
     8 import re
     9 with open('text','r') as txt:
    10     f = txt.read()
    11     print re.match('bin',f)
    12     print re.search('bin',f).start()
    13     print re.search('bin',f).end()
    View Code

    findall():用于找找匹配的字符,把匹配到的字符作为数组返回

    1 #!/usr/bin/env python 
    2 #coding:utf-8
    3 import re
    4 a = " man x 6 12 man / var /cache/man /bin/nologin"
    5 print re.findall('[a-z]{3}s', a)
    6 
    7 输出结果:
    8 ['man ', 'man ', 'var ', 'man ']
    View Code

    sub():用于替换,接受四个参数,sub(匹配模式,要替换成的内容,进行替换的字符串,最大的替换次数)最后一个为可选参数.返回替换后的字符串

    把只有3个字母组成的单词替换成heihei,只替换前3个

    1 #!/usr/bin/env python 
    2 #coding:utf-8
    3 import re
    4 a = " man x 6 12 man / var /cache/man /bin/nologin"
    5 print re.sub('[a-z]{3}s', 'heihei',a,3)
    6 
    7 输出结果:
    8 heiheix 6 12 heihei/ heihei/cache/man /bin/nologin
    View Code

    split():用于分割字符串,接受3个参数re.split(匹配模式,要分割的字符串,最大的分割次数),最后一个为可选参数,返回分割后的字符串列表

    1 #!/usr/bin/env python 
    2 #coding:utf-8
    3 import re
    4 a = " man x 6 12 man / var /cache/man /bin/nologin"
    5 print re.split('a', a)
    6 
    7 输出结果:
    8 [' m', 'n x 6 12 m', 'n / v', 'r /c', 'che/m', 'n /bin/nologin']
    View Code

    编译正则表达式
    compile():编译正则表达式,返回一个正则对象实例,然后通过返回的对象实例对字符串进行查找替换,接受2个参数compile(正则表达式,匹配标志)
    例子搜索web日志里面的IP

    1 #!/usr/bin/env python 
    2 #coding:utf-8
    3 import re
    4 logstr = '192.168.1.56 - - [14/Apr/2014:01:33:06 -0400] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"'
    5 r = re.compile(r'd{1,3}.d{1,3}.d{1,3}.d{1,3}')
    6 print r.findall(logstr)
    7 
    8 输出结果:
    9 ['192.168.1.56']
    View Code
  • 相关阅读:
    php 5.3新特性
    php:// — 访问各个输入/输出流(I/O streams)
    php 二维数组排序
    js 面向对象式编程
    jQuery 源码学习笔记
    c++ 指针(二)
    c++ 指针(一)
    visual studio 2012 的制作ActiveX、打包和发布
    用linqPad帮助你快速学习LINQ
    Caliburn.Micro学习笔记(五)----协同IResult
  • 原文地址:https://www.cnblogs.com/pping/p/3847829.html
Copyright © 2011-2022 走看看