美文网首页
Python 正则表达式(RegEx)

Python 正则表达式(RegEx)

作者: 吴吃辣 | 来源:发表于2019-08-22 11:33 被阅读0次

    版权所有,未经许可,禁止转载


    章节

    Python 介绍
    Python 开发环境搭建
    Python 语法
    Python 变量
    Python 数值类型
    Python 类型转换
    Python 字符串(String)
    Python 运算符
    Python 列表(list)
    Python 元组(Tuple)
    Python 集合(Set)
    Python 字典(Dictionary)
    Python If … Else
    Python While 循环
    Python For 循环
    Python 函数
    Python Lambda
    Python 类与对象
    Python 继承
    Python 迭代器(Iterator)
    Python 模块
    Python 日期(Datetime)
    Python JSON
    Python 正则表达式(RegEx)
    Python PIP包管理器
    Python 异常处理(Try…Except)
    Python 打开文件(File Open)
    Python 读文件
    Python 写文件
    Python 删除文件与文件夹


    正则表达式是组成搜索模式的字符序列。

    正则表达式用于按指定的搜索模式搜索字符串。

    正则表达式(RegEx)模块

    Python有一个名为re的内置包,用来处理正则表达式。

    示例

    导入re模块:

    import re
    

    Python中的正则表达式

    导入re模块后,就可以开始使用正则表达式:

    示例

    搜索字符串,查看是否以“the”开头,以“Spain”结尾:

    import re
    
    txt = "The rain in Spain"
    x = re.search("^The.*Spain$", txt)
    

    正则表达式函数

    re模块提供了一组函数,用于搜索匹配的字符串:

    <table>
    <tbody><tr>
    <th style="width:20%;">函数</th>
    <th>描述</th>
    </tr>
    <tr>
    <td>findall</td>
    <td>返回包含所有匹配项的列表</td>
    </tr>
    <tr>
    <td>search</td>
    <td>如果文本中有匹配项,则返回匹配对象</td>
    </tr>
    <tr>
    <td>split</td>
    <td>使用字符串分割文本,返回文本被分割后的列表 </td>
    </tr>
    <tr>
    <td>sub</td>
    <td>用字符串替换一个或多个匹配项/td>
    </tr>
    </tbody></table>

    元字符

    元字符是具有特殊意义的字符:

    <table>
    <tbody><tr>
    <th >字符</th>
    <th>描述</th>
    <th>例子</th>
    </tr>
    <tr>
    <td>[]</td>
    <td>字符集合</td>
    <td>"[a-m]"</td>
    </tr>
    <tr>
    <td></td>
    <td>标志特殊转义字符(也可以用来转义特定字符)</td>
    <td>"\d"</td>
    </tr>
    <tr>
    <td>.</td>
    <td>任何字符(换行字符除外)</td>
    <td>"he..o"</td>
    </tr>
    <tr>
    <td>^</td>
    <td>开始文本</td>
    <td>"^hello"</td>
    </tr>
    <tr>
    <td></td> <td>结束文本</td> <td>"world"</td>
    </tr>
    <tr>
    <td></td>
    <td>0次或多次出现</td>
    <td>"aix
    "</td>
    </tr>
    <tr>
    <td>+</td>
    <td>1次或多次出现</td>
    <td>"aix+"</td>
    </tr>
    <tr>
    <td>{}</td>
    <td>确定的出现次数</td>
    <td>"al{2}"</td>
    </tr>
    <tr>
    <td>|</td>
    <td>或者</td>
    <td>"falls|stays"</td>
    </tr>
    <tr>
    <td>()</td>
    <td>捕获并分组</td>
    <td> </td>
    </tr>
    </tbody></table>

    特殊转义字符

    特殊转义字符是\后面跟着下面列表中的某个字符,有特殊的含义:

    <table>
    <tbody><tr>
    <th>字符</th>
    <th>描述</th>
    <th>例子</th>
    </tr>
    <tr>
    <td>\A</td>
    <td>如果指定字符串位于文本的开头,则返回匹配项</td>
    <td>"\AThe"</td>
    </tr>
    <tr>
    <td>\b</td>
    <td>如果指定字符串位于文本开头或结尾,则返回匹配项</td>
    <td>r"\bain"
    r"ain\b"</td>
    </tr>
    <tr>
    <td>\B</td>
    <td>如果指定字符串没有位于文本开头或结尾,则返回匹配项</td>
    <td>r"\Bain"
    r"ain\B"</td>
    </tr>
    <tr>
    <td>\d</td>
    <td>如果文本中包含了数字(0-9),返回匹配项</td>
    <td>"\d"</td>
    </tr>
    <tr>
    <td>\D</td>
    <td>如果文本中不包含数字(0-9),返回匹配项</td>
    <td>"\D"</td>
    </tr>
    <tr>
    <td>\s</td>
    <td>返回文本中包含空白字符的匹配项</td>
    <td>"\s"</td>
    </tr>
    <tr>
    <td>\S</td>
    <td>返回文本中不包含空白字符的匹配项</td>
    <td>"\S"</td>
    </tr>
    <tr>
    <td>\w</td>
    <td>如果文本中包含任何单词字符(从a到Z的字符,从0到9的数字,以及下划线字符),返回匹配项</td>
    <td>"\w"</td>
    </tr>
    <tr>
    <td>\W</td>
    <td>如果文本中不包含任何单词字符(从a到Z的字符,从0到9的数字,以及下划线
    字符),返回匹配项</td>
    <td>"\W"</td>
    </tr>
    <tr>
    <td>\Z</td>
    <td>如果指定的字符串位于文本末尾,则返回匹配项</td>
    <td>"Spain\Z"</td>
    </tr>
    </tbody></table>

    集合

    集合是一对方括号[]中的一组字符,具有特殊的含义:

    <table>
    <tbody><tr>
    <th>Set</th>
    <th>描述</th>
    </tr>
    <tr>
    <td>[arn]</td>
    <td>返回匹配指定字符(a、r或n)之一的匹配项</td>
    </tr>
    <tr>
    <td>[a-n]</td>
    <td>返回匹配任意a和n之间,小写字符的匹配项</td>
    </tr>
    <tr>
    <td>[^arn]</td>
    <td>返回匹配除a、r和n之外的任何字符的匹配项</td>
    </tr>
    <tr>
    <td>[0123]</td>
    <td>返回匹配指定数字(0、1、2或3)的匹配项</td>
    </tr>
    <tr>
    <td>[0-9]</td>
    <td>返回匹配0到9之间任意数字的匹配项</td>
    </tr>
    <tr>
    <td>[0-5][0-9]</td>
    <td>返回匹配从00到59的任意两位数的匹配项</td>
    </tr>
    <tr>
    <td>[a-zA-Z]</td>
    <td>返回匹配按字母顺序在a和z之间、小写或大写的任何字符的匹配项</td>
    </tr>
    <tr>
    <td>[+]</td>
    <td>在集合中,+,*,.,|,(),$,{}没有特殊的含义,所以[+]的意思是: 返回字符串中"+"字符的匹配项</td>
    </tr>
    </tbody></table>

    findall()函数

    findall()函数返回一个包含所有匹配项的列表。

    示例

    打印包含所有匹配项的列表:

    import re
    
    str = "The rain in Spain"
    x = re.findall("ai", str)
    print(x)
    

    列表中的匹配项按找到的顺序排序。

    如果没有找到匹配项,返回一个空列表:

    示例

    打印所有匹配项的列表:

    import re
    
    str = "The rain in Spain"
    x = re.findall("Portugal", str)
    print(x)
    

    search() 函数

    search() 搜索文本中的匹配项,如果有匹配项,返回匹配对象。

    如果有多个匹配项,只返回第一个:

    示例

    搜索文本中的第一个空白字符:

    import re
    
    str = "The rain in Spain"
    x = re.search("\s", str)
    
    print("第一个空白字符位于:", x.start())
    

    如果没有找到匹配项,则返回None值:

    示例

    不匹配:

    import re
    
    str = "The rain in Spain"
    x = re.search("Portugal", str)
    print(x)
    

    split() 函数

    split()函数使用字符串分割文本,返回文本被分割后的列表:

    示例

    在每个空白字符处分割文本:

    import re
    
    str = "The rain in Spain"
    x = re.split("\s", str)
    print(x)
    

    可以通过指定maxsplit参数来控制分割次数:

    示例

    只在第一次匹配时分割字符串:

    import re
    
    str = "The rain in Spain"
    x = re.split("\s", str, 1)
    print(x)
    

    sub() Function

    将匹配项替换为指定文本:

    示例

    用数字9替换每个空白字符:

    import re
    
    str = "The rain in Spain"
    x = re.sub("\s", "9", str)
    print(x)
    

    可以通过count参数来控制替换的数量:

    示例

    替换前两项:

    import re
    
    str = "The rain in Spain"
    x = re.sub("\s", "9", str, 2)
    print(x)
    

    匹配对象

    匹配对象是一个包含搜索和结果信息的对象。

    注意: 如果没有匹配,则返回None值,而不是匹配对象。

    示例

    搜索一下,将返回一个匹配对象:

    import re
    
    str = "The rain in Spain"
    x = re.search("ai", str)
    print(x) #打印对象
    

    匹配对象具有用于检索搜索信息的属性和方法:

    • .span() 返回一个元组,其中包含匹配项的开始和结束位置。
    • .string 返回传递给函数的文本
    • .group() 返回文本中匹配的部分

    示例

    打印第一个匹配项的位置(开始和结束位置)。

    正则表达式查找任何以大写字母“S”开头的单词:

    import re
    
    str = "The rain in Spain"
    x = re.search(r"\bS\w+", str)
    print(x.span())
    

    示例

    打印传入函数的文本:

    import re
    
    str = "The rain in Spain"
    x = re.search(r"\bS\w+", str)
    print(x.string)
    

    示例

    打印文本中匹配的部分。

    正则表达式查找任何以大写字母“S”开头的单词:

    import re
    
    str = "The rain in Spain"
    x = re.search(r"\bS\w+", str)
    print(x.group())
    

    注意: 如果没有匹配,则返回None值,而不是匹配对象。

    相关文章

      网友评论

          本文标题:Python 正则表达式(RegEx)

          本文链接:https://www.haomeiwen.com/subject/kdfnsctx.html