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返回的仍然是列表,每个元素是匹配到的不同分组组成的元组

浙公网安备 33010602011771号