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

    简介

    正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。

    匹配规则

    字符 注释 检索字符串 表达式 成功匹配对象
    . 匹配除换行符( )以外的任意字符 123456 ... 123
    ^ 匹配字符串的开始,多行内容时匹配每一行的开始 123456 ^123 & ^23 123 & None
    $ 匹配字符串的结尾,多行内容时匹配每一行的结尾 123456 456$ & 56$ 456 & None
    * 出现0次或无限次,也就是第0个字符 123456 4* “ ”
    ? 出现0次或1次,也是第0个字符 123456 4? “ ”
    + 前一个字符至少出现1次 123456 4+ 4
    d 匹配数字:0~9 12345@ d 1
    D 匹配非数字字符 12345@ D @
    s 匹配空格字符( , , ,f,v) 1 6 sss " "
    S 匹配非空格字符( , , ,f,v) 1 6 S 1
    w 匹配任意字母数字下划线 1z_@ www 1z_
    W 匹配非单词字符 1z_@ W @
    [0-9] 指定一个范围数字集 12abCD蔡 [0-9][0-9] 12
    [a-z] 指定一个范围小写字母集 12abCD蔡 [a-z][a-z] ab
    [A-Z] 指定一个范围大写字母集 12abCD蔡 [A-Z][A-Z] CD
    [u4e00-u9fa5] 指定一个范围汉字集 12abCD蔡 [u4e00-u9fa5]
    {n} {n}前面的原子出现了n次 123456 d{5}
    {n,} {n}前面的原子出现了无限次 123456 d{5,} 123456
    {n,m} {n}前面的原子出现了n-m次 123456 d{2,4} 1234
    [] 字符集,对应位置上可以是字符集里的任意字符 14201974 20[251]9 2019

    示例:

    import re # 导入正则模块
    tel = "0755-12345678"  #实例化一个检索对象
    pat = r"2[0567][1789]d{5}|d{4}-d{8}"  #实例化表达式
    print(re.findall(pat, tel))  # 在检索对象中按照表达式进行检索并打印
    
    >>>  ['0755-12345678']  # 返回值
    

    re模块

    此模块主要方法如下

    re.match()       #尝试从字符串的起始位置匹配一个模式(pattern),如果不是起始位置匹配成功的话,match()就返回None
    re.search()      #函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。
    re.findall()       #遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
    re.compile()    #编译正则表达式模式,返回一个对象的模式。(可以把那些常用的正则表达式编译成正则表达式对象,这样可以提高一点效率。)
    re.sub()          #使用re替换string中每一个匹配的子串后返回替换后的字符串。
    re.subn()        #返回替换次数
    re.split()         #按照能够匹配的子串将string分割后返回列表。
    

    match()

    re.match(pattern, string, flags=0)
    pattern:正则表达式(或者正则表达式对象) string:要匹配的字符串 flags:修饰符
    尝试从字符串的起始位置匹配一个模式(pattern) 如果不是起始位置匹配成功的话 match()就返回None

    import re
    
    strr = "javapythonhtml"
    
    result = re.match('.*python',strr)
    
    print(result)
    print(result.group()) # .group()表示的是返回正则匹配的结果
    print(result.span()) # .span()表示返回正则匹配的范围
    
    >>> <re.Match object; span=(0, 10), match='javapython'>
    >>> javapython
    >>> (0, 10)
    

    re.search(pattern, string, flags=0)
    pattern:正则表达式(或者正则表达式对象) string:要匹配的字符串 flags:修饰符
    re.match()和re.search()用法类似唯一的区别在于re.match()从字符串头开始匹配,若头匹配不成功,则返回None

    import re
    
    strr = "javapythonhtml"
    
    result = re.match('python',strr)
    
    print(result)
    print(result.group()) #
    print(result.span()) 
    
    >>> <re.Match object; span=(4, 10), match='python'>
    >>> python
    >>> (4, 10)
    
    

    finall()

    re.finditer(pattern, string, flags=0)
    pattern:正则表达式(或者正则表达式对象 string:要匹配的字符串 flags:修饰符 
    返回一个顺序访问每一个匹配结果(Match对象)的迭代器 找到 RE 匹配的所有子串 返回数组

    import re
    
    strr ="-------python---------------python-----------------
    ------python-------------------python------------------"
    
    result = re.findall(r'python', strr)
    print(result)
    
    
    >>> ['python', 'python', 'python', 'python']
    

    finditer()

    re.finditer(pattern, string, flag)
    pattern:正则表达式(或者正则表达式对象 string:要匹配的字符串 flags:修饰符
    返回一个顺序访问每一个匹配结果(Match对象)的迭代器 找到 RE 匹配的所有子串 返回形式为迭代器

    import re
    
    strr ="-------python---------------python-----------------
    ------python-------------------python------------------"
    
    data = re.finditer(r"python",strr)
    
    list1 = []
    for i in data:
    	list1.append(i.group())
    
    print(list1)
    
    >>> ['python', 'python', 'python', 'python']
    

    compile()

    re.compile(pattern,flags=0)
    pattern:正则表达式(或者正则表达式对象) flags:修饰符 
    编译正则表达式模式 返回一个对象的模式

    import re
    
    strr ="-------python---------------python-----------------
    ------python-------------------python------------------"
    
    result = re.compile(r"python")
    print(result.findall(strr))
    
    >>> ['python', 'python', 'python', 'python']
    

    sub()

    re.sub(pattern, repl, string, count=0, flags=0)
    pattern:正则表达式(或者正则表达式对象) repl:替换的字符串 string:要匹配的字符串 count:要替换的个数 flags:修饰符 
    用于替换字符

    import re
    
    strr = "hello 111,hello 222"
    
    result = re.sub(r"d+", "666", strr)
    print(result)
    
    >>> hello 666,hello 666
    

    split()

    re.split(pattern, string,[maxsplit])
    正则表达式(或者正则表达式对象)string:要匹配的字符串 maxsplit:用于指定最大分割次数 不指定将全部分割
    用于分割字符

    import re
    
    strr = ",leesin,hasaki,zed,,javen,,,"
    pat = re.compile(r",+") 
    result = re.split(r",+",strr,3)
    
    print(result
    
    >>> ['', 'leesin', 'hasaki', 'zed,,javen,,,']
    
  • 相关阅读:
    两台linux服务器相互拷贝文件的两个方法
    两台Linux服务器之间复制文件
    Linux两台服务器之间文件/文件夹拷贝
    Linux压缩和解压缩命令
    MongoDB学习笔记 1.1
    centos 7 MysSQL 5.6.39 二进制安装
    CentOS 7 Cobbler 配置 YUM仓库
    CentOS 7 Cobbler 自动化安装系统
    CentOS 7 Cobbler 安装
    OpenStack
  • 原文地址:https://www.cnblogs.com/youngleesin/p/11230394.html
Copyright © 2011-2022 走看看