上一节:
下一节:

  Python 正则表达式



  • 正则表达式

    RegEx或正则表达式是形成搜索模式的一系列字符。RegEx可用于检查字符串是否包含指定的搜索模式。
    如果您对JSON不熟悉,请参阅我们的JSON教程
  • 正则表达式模块

    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 如果字符串中任何地方都存在匹配项,则返回Match对象
    split 返回一个列表,该字符串在每次匹配时均已拆分
    sub 用字符串替换一个或多个匹配项
  • 元字符

    re模块提供了一组函数,使我们可以在字符串中搜索匹配项:
    元字符 描述 例子 尝试
    [] 一组字符 "[a-m]" 尝试一下
    \ 特殊序列的一个标志(也可用于特殊字符进行转义) "\d" 尝试一下
    . 任何字符(除换行符) "he..o" 尝试一下
    ^ 以某字符开始 "^hello" 尝试一下
    $ 以某字符结束 "world$" 尝试一下
    * 零个或多个出现 "aix*" 尝试一下
    + 一次或多次出现 "aix+" 尝试一下
    {} 指定某字符序列出现的数量 "al{2}" 尝试一下
    | 两者任一 "falls|stays" 尝试一下
    () 字符组    
  • 特殊序列

    以下列表中的字符之一是一个特殊的序列,\其后具有特殊含义:
    字符 描述 例子 尝试
    \A 如果指定的字符在字符串的开头,则返回匹配项 "\AThe" 尝试一下
    \b 返回一个匹配项,其中指定字符在单词的开头或结尾 r"\bain"
    r"ain\b"
    尝试一下
    \B 返回存在指定字符的匹配项,但不在单词的开头(或结尾) r"\Bain"
    r"ain\B"
    尝试一下
    \d 返回字符串包含数字(0到9之间的数字)的匹配项 "\d" 尝试一下
    \D 返回字符串不包含数字的匹配项 "\D" 尝试一下
    \s 返回字符串包含空格字符的匹配项 "\s" 尝试一下
    \S 返回字符串不包含空格字符的匹配项 "\S" 尝试一下
    \w 返回一个匹配项,其中字符串包含任何单词字符(从a到Z的字符,0到9的数字以及下划线_字符) "\w" 尝试一下
    \W 返回一个匹配项,其中字符串不包含任何单词字符 "\W" 尝试一下
    \Z 如果指定的字符位于字符串的末尾,则返回匹配项 "Spain\Z" 尝试一下
  • 字符集合

    集合是在一对方括号[]内的一组字符,具有特殊含义:
    集合 描述 尝试
    [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] 返回字母和字母之间的任何匹配项,字母之间是小写或大写 尝试一下
    [+] 在集合中+*.|()${}没有特殊含义,因此[+]的意思是:返回字符串中任何+字符的匹配项 尝试一下
  • 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()函数在字符串中搜索匹配项,如果存在匹配项,则返回Match对象。如果存在多个匹配项,则仅返回匹配项的第一个匹配项:
    搜索字符串中的第一个空格字符:
    import re
    
    str = "The rain in Spain"
    x = re.search("\s", str)
    
    print("The first white-space character is located in position:", x.start())
    
    
    如果找不到匹配项,则返回值None
    进行搜索,返回不匹配的内容:
    import re
    
    str = "The rain in Spain"
    x = re.search("Portugal", str)
    print(x)
    
    
  • split()函数

    search()函数返回一个列表,其中每个匹配项都已将字符串分割开:
    在每个空格字符处分割:
    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()函数

    sub()函数将匹配项替换为您选择的文本:
    将每个空白字符替换为数字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)
    
  • Match对象

    Match对象是包含有关搜索和结果信息的对象。
    注意:如果没有匹配项,则将返回 None 值,而不是Match对象。
    进行搜索以返回Match对象:
    import re
    
    str = "The rain in Spain"
    x = re.search("ai", str)
    print(x) #this will print an object
    
    
    Match对象具有用于检索有关搜索信息和结果的属性和方法:
    • .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,而不是Match对象。
上一节:
下一节: