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

    一、re模块

    就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。

    字符匹配(普通字符,元字符):

    1 普通字符:大多数字符和字母都会和自身匹配
                  >>> re.findall('alvin','yuanaleSalvinxalexwupeiqi')
                          ['alvin'] 

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

    ^     只匹配字符串的开始位置,如果没有就不匹配后面的了
    .      除换行符以外的任意一个符号
    $     匹配字符串的末尾
    * + ? {} 代表重复*(0,无穷)、+(1,无穷)、?(0,1)、{}指定次数
    转义符
    1、把元字符转成普通符号(去除元字符的功能)
    2、将一些不同符号转成特殊功能符号
    
    d  匹配任何十进制数;      它相当于类 [0-9]。
    D  匹配任何非数字字符;    它相当于类 [^0-9]。
    s  匹配任何空白字符;      它相当于类 [ 	
    
    fv]。
    S  匹配任何非空白字符;    它相当于类 [^ 	
    
    fv]。
    w  匹配任何字母数字字符;   它相当于类 [a-zA-Z0-9_]。
    W  匹配任何非字母数字字符; 它相当于类 [^a-zA-Z0-9_]
      匹配一个特殊字符边界,比如空格 ,&,#等
    分组()#把某些内容固定成一项
    m = re.findall(r'(ad)+', 'add')
    print(m)
     
    ret=re.search('(?P<id>d{2})/(?P<name>w{3})','23/com')#给分组命名
    print(ret.group())#23/com
    print(ret.group('id'))#23

    管道符 | 或
    ret=re.findall("www.(w+).(com|cn)",("www.baidu.com,www.baidu.cn")
    print(ret)

    #--------------------------------------------字符集[]
    ret=re.findall('a[bc]d','acd')
    print(ret)#['acd']
     
    ret=re.findall('[a-z]','acd')
    print(ret)#['a', 'c', 'd']
     
    ret=re.findall('[.*+]','a.cd+')
    print(ret)#['.', '+']
     
    #在字符集里有功能的符号: - ^ 
     
    ret=re.findall('[1-9]','45dha3')#范围
    print(ret)#['4', '5', '3']
     
    ret=re.findall('[^ab]','45bdha3')^取反
    print(ret)#['4', '5', 'd', 'h', '3']
     
    ret=re.findall('[d]','45bdha3')^转义符
    print(ret)#['4', '5', '3']


     二、贪婪匹配

    贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配
    tern1 = @"a.*c";   // greedy match 
    Regex regex = new Regex(pattern1);
    regex.Match("abcabc"); // return "abcabc"
    非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配
    
    string pattern1 = @"a.*?c";   // non-greedy match 
    Regex regex = new Regex(pattern1);
    regex.Match("abcabc"); // return "abc"


    几个常用的非贪婪匹配Pattern
    *? 重复任意次,但尽可能少重复
    +? 重复1次或更多次,但尽可能少重复
    ?? 重复0次或1次,但尽可能少重复
    {n,m}? 重复n到m次,但尽可能少重复
    {n,}? 重复n次以上,但尽可能少重复




    .*?的用法:
     
    --------------------------------
    
    . 是任意字符
    * 是取 0 至 无限长度
    ? 是非贪婪模式。
    何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
    .*?x
    
    就是取前面任意长度的字符,直到一个x出现
    
    
  • 相关阅读:
    linux学习笔记
    随笔
    matlab自学笔记(3)—图像绘制与图像处理
    matlab自学笔记(1)安装与简介
    matlab自学笔记(2)函数的使用
    四轴飞行器
    小学生300道练习题程序及问题
    对运动软件——乐动力的评价
    软件工程随记
    Visual Studio 2013版本安装
  • 原文地址:https://www.cnblogs.com/fenglinglf/p/7080714.html
Copyright © 2011-2022 走看看