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

    python正则表达式的实现主要是通过python的re库,re库是python的标准库,所以无须安装

    1.正则表达式的常用操作符

    操作符说明实例
    . 表示任何单个字符  
    [ ] 字符集,对单个字符给出取值范围 [abc]表示a、b、c,[a‐z]表示a到z单个字符
    [^ ] 非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符
    * 前一个字符0次或无限次扩展 abc* 表示ab、abc、abcc、abccc等
    + 前一个字符1次或无限次扩展 abc+ 表示abc、abcc、abccc等
    ? 前一个字符0次或1次扩展 abc? 表示ab、abc
    | 左右表达式任意一个 abc|def表示abc、def
    {m} 扩展前一个字符m次 ab{2}c表示abbc
    {m,n} 扩展前一个字符m至n次(含n) ab{1,2}c表示abc、abbc
    ^ 匹配字符串开头 ^abc表示abc且在一个字符串的开头
    $ 匹配字符串结尾 abc$表示abc且在一个字符串的结尾
    ( ) 分组标记,内部只能使用 操作符|(abc)表示abc,(abc|def)表示abc、def
    d 数字,等价于[0‐9]  
    w 单词字符,等价于[A‐Za‐z0‐9_]  

    2.re库的使用

    主要功能函数

    函数说明
    re.search() 在一个字符串中搜索匹配正则表达式的第一个位置,匹配成功返回match对象,否则返回None
    re.match() 从一个字符串的开始位置起匹配正则表达式,匹配成功返回match对象,否则返回None
    re.findall() 搜索字符串,以列表类型返回全部能匹配的子串
    re.split() 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型
    re.finditer() 搜索字符串,返回一个匹配结果的迭代类型,每个迭代元素是match对象
    re.sub() 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串

    更详细的说明请参考Python re文档

    例如:

    re.search(pattern,string,flags=0)

    其中:

    • pattern : 正则表达式的字符串或原生字符串表示

    • string : 待匹配字符串

    • flags : 正则表达式使用时的控制标记

    常用标记说明
    re.I或re.IGNORECASE 忽略正则表达式的大小写,[A‐Z]能够匹配小写字符
    re.M或re.MULTILINE 正则表达式中的^操作符能够将给定字符串的每行当作匹配开始
    re.S或re.DOTALL 正则表达式中的.操作符能够匹配所有字符,默认匹配除换行外的所有字符
    >>> import re
    >>> m = re.search(r'[1-9]d{5}', 'abc1234567')
    >>> if m:
    ...     m.group(0)
    ...
    '123456'

    还有一种写法是这样的

    >>> import re
    >>> t = re.compile(r'[1-9]d{5}')
    >>> m = t.search('abc1234567')
    >>> if m:
    ...     m.group(0)
    ...
    '123456'

    第二种写法的好处是:当要对一个正则表达式进行多次字符串匹配时,可以只编译一次,匹配多次,可以提升效率

    3.Match对象

    属性说明
    .string 待匹配的文本
    .re 匹配时使用的patter对象(正则表达式)
    .pos 正则表达式搜索文本的开始位置
    .endpos 正则表达式搜索文本的结束位置
    .group() 获得匹配后的字符串
    .start() 匹配字符串在原始字符串的开始位置
    .end() 匹配字符串在原始字符串的结束位置
    .span() 返回(.start(), .end())

    4.re库的贪婪匹配

    re库默认采用贪婪匹配,即输出匹配长的子串

    例如

    >>> match = re.search(r'PY.*N', 'PYANBNCNDN')   
    >>> match.group(0)   
    'PYANBNCNDN'

    那么,如何输出最小的匹配呢

    可以在.*后面加个?,就像这样

    >>> match = re.search(r'PY.*?N', 'PYANBNCNDN')   
    >>> match.group(0) 
    'PYAN'

    还有一些其他的操作符

    操作符说明
    *? 前一个字符0次或无限次扩展,小匹配
    +? 前一个字符1次或无限次扩展,小匹配
    ?? 前一个字符0次或1次扩展,小匹配
    {m,n}? 扩展前一个字符m至n次(含n),最小匹配

    正则表达式说明

    函数说明
    sub(pattern,repl,string) 把字符串中的所有匹配表达式pattern中的地方替换成repl
    [^**] 表示不匹配此字符集中的任何一个字符
    u4e00-u9fa5 汉字的unicode范围
    u0030-u0039 数字的unicode范围
    u0041-u005a 大写字母unicode范围
    u0061-u007a 小写字母unicode范围
    uAC00-uD7AF 韩文的unicode范围
    u3040-u31FF 日文的unicode范围

    关注公众号:

  • 相关阅读:
    磁盘冗余 ---RAID磁盘管理
    linux磁盘管理
    linux基础命令
    Apache配置rewrite
    memcache运维整理
    mysql主从配置
    rsync相关整理
    Lua 学习笔记(六)
    Lua 学习笔记(五)
    Lua 学习笔记(四)
  • 原文地址:https://www.cnblogs.com/QYGQH/p/12653871.html
Copyright © 2011-2022 走看看