• Python 正则表达式(RegEx)


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


    章节


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

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

    正则表达式(RegEx)模块

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

    示例

    导入re模块:

    import re
    

    Python中的正则表达式

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

    示例

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

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

    正则表达式函数

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

    函数 描述
    findall 返回包含所有匹配项的列表
    search 如果文本中有匹配项,则返回匹配对象
    split 使用字符串分割文本,返回文本被分割后的列表
    sub 用字符串替换一个或多个匹配项/td>

    元字符

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

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

    特殊转义字符

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

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

    集合

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

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

    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"Sw+", str)
    print(x.span())
    

    示例

    打印传入函数的文本:

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

    示例

    打印文本中匹配的部分。

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

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

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

  • 相关阅读:
    #define用法详解
    memchr函数
    aiohttp模块1 client
    asyncio标准库7 Producer/consumer
    asyncio标准库6 Threads & Subprocess
    asyncio标准库5 TCP echo client and server
    asyncio标准库4 asyncio performance
    asyncio标准库3 HTTP client example
    asyncio标准库2 Hello Clock
    asyncio标准库1 Hello World
  • 原文地址:https://www.cnblogs.com/jinbuqi/p/11393320.html
Copyright © 2020-2023  润新知