python 正则

正则匹配函数

 

match函数,从头进行匹配,如果匹配成功,返回一个Match类的对象,在该对象中可以使用span()函数获取匹配的索引数组对象;如果匹配不成功,则返回none

相比search函数,search函数可以匹配一个字符串中的任意位置

pattern的字符串必须使用raw

常用正则匹配符

字符匹配符号

字符匹配符号 描述
. 表示匹配任意一个字符
\\ 匹配\\
\t 匹配\t
\n 匹配\n
\r 匹配\r

 

范围匹配符号

范围匹配符号 描述
[abc] 匹配abc中的一个
[^abc] 匹配除了abc中的一位
[a-zA-Z] 匹配所有字母
[0-9] 匹配所有数字

边界匹配符号

^ 以^后面的字符开头
$ 以$前面的字符开头

正则数量匹配

? 匹配字符出现0次获1次
* 匹配字符出现0次,1次获多次
+ 匹配字符出现1次或多次
{n} 匹配字符出现正好n次
{n,} 匹配字符出现n次以上
{n.m} 匹配字符出现n~m次

简化正则表达式

\A 相当于^
\Z 相当于$
\b 匹配开始或结束位置的空字符串
\B 匹配不在开始或结束位置的空字符串
\d 匹配一位数字
\D 匹配一位非数字
\s 匹配任意的一位空格
\S 匹配任意的一位非空格
\w 匹配任意的一位字母和非数字、_
\W 匹配任意的一位非   字母和非数字、_
. 匹配任意一位字符

可以使用()来将多个匹配符号定义在一起

如果要取消匹配符号的意义,可以在前面加转义符

正则逻辑表达式

正则表达式A 正则表达式B... 表达式A之后紧跟着表达式B
正则表达式A|正则表达式B|.. 二者任选一

分组

一个正则表达式可以匹配任意多个数据内容,为了获得这些数据中指定的子数据,可以通过分组的形式对数据进行归类

(...) 默认分组,索引值从1开始
(?iLmsux) 设置分组模式为i、L、m、u、x
(?:...) 肌酸索引时跳过该分组
(?P<name>...) 可以通过索引或指定的name名称获取内容
(?P=name) 可以通过已经存在的name获取前面定义的正则表达式
import re
if __name__ == '__main__':
    string = "Proc435ess finish435d with exit code 0"
    pattern0 = r"(\d{3,4})(\w{1})"
    match = re.search(pattern0, string)
    print(match.group(0)) # 返回的是总的一个大分组
    print(match.group(1)) # 返回第一个小分组的信息
    # 如果是findall函数
    match = re.findall(pattern0, string)  # findall函数直接返回的是一个数组,然后每个元素是一个含小分组的元组
    print(match[0])#得到第一个匹配结果的元组,元组的信息是每个分组的结果

    #(:?...)
    pattern1 = r"(?:\d{3,4})(\w{1})"
    match = re.search(pattern1, string)
    print(match.group())
    print(match.group(1))  # 没有了第一个分组的435
    #(?P<name>...)
    pattern2 = r"(?P<num>\d{3,4})(\w{1})"
    match = re.search(pattern2, string)
    print(match.group("num"))  # 通过num得到了第一个分组435

 

 环视

环视主要就是用来进行正则表达式的位置定位

(?=...) 所在位置右侧能够匹配括号内正则表达式
(?!...) 所在位置右侧不能够匹配括号内正则表达式
(?<=...) 所在位置左侧能够匹配括号内正则表达式
(?<!...) 所在位置左侧不能够匹配括号内正则表达式
import re
if __name__ == '__main__':
    string = "name:Lilei tel:10086 sex:male"\
            "name:HanMeimei tel:144 sex:female"
    pattern = r"(?<=name:)(?P<name>\w+)( tel:\d+)"  # 找name:xxx tel:xxx
    al = re.findall(pattern,string)
    print(al)

 

 最后findall返回的仍然是列表,每个元素是匹配到的不同分组组成的元组

posted @ 2020-09-15 18:40  磊神加特林  阅读(160)  评论(0)    收藏  举报