正则相关方法及匹配规则

it2023-07-09  70

常用函数

''' 1.match() 单字符匹配,行首匹配,如果匹配上,返回一个对象,可以调用group(),反之返回None 2.search() 依次匹配,如果找到一个符合条件则停止查找,如果查找到,返回一个对象,反之返回None,工作原理:search的底层调用match,可以调用group() 3.findall() 将符合条件的内容全部匹配出来,返回一个列表 '''

特殊符号

''' 1.^:表示行首匹配 2.[^]:否定,表示不匹配[]中的内容 3.$:行尾匹配 ^xxx$ 限量匹配,只匹配符合xxx表达式及长度的内容 4.-:连接符 如:0-9表示0123456789,a-z,A-Z

单字符匹配

import re # 1.[]:匹配[]中的一个字符 r11 = re.match(r'[0-9a-z]', 'Aa1') print(r11) # None r12 = re.match(r'[0-9a-z]', 'ab1') print(r12.group()) # 'a' r13 = re.search(r'[0-9a-z]', 'AabB1') print(r13.group()) # 'a' r14 = re.findall(r'[0-9a-z]', 'AabB1') print(r14) # ['a', 'b', '1'] # 2. ''' \d 匹配数字,效果同[0-9] \D 匹配非数字字符,效果同[^0-9] \w 匹配数字,字母和下划线,效果同[0-9a-zA-Z_] \W 匹配非数字,字母和下划线,效果同[^0-9a-zA-Z_] \s 匹配任意的空白符(空格,回车,换行,制表,换页), 效果同[ \r\n\t\f] \S 匹配任意的非空白符,效果同[^ \f\n\r\t] ''' # 3.多字符实现 # [][][]...或\d\d\d...或[]\d[]\w... r21 = re.match(r'[a-z]\d', 'a1bC12') print(r21.group()) # 'a1' r22 = re.match(r'[a-z]\d', 'aC12') print(r22) # None

数量词匹配

import re # 1.(xyz):匹配小括号内的xyz(作为一个整体去匹配) r31 = re.findall(r'(xyz)', 'asdxyzfghxyz') print(r31) # ['xyz', 'xyz'] # 2.x{n}:匹配确定的n个x(n是一个非负整数) r32 = re.findall(r'x{2}', 'xxxxxxx') print(r32) # ['xx', 'xx', 'xx'] # 3.x{n,}:匹配至少n个x r33 = re.findall(r'x{2,}', 'xxxxxxx') print(r33) # ['xxxxxxx'] # 4.x{n,m}:匹配至少n个最多m个x。注意:n <= m r34 = re.findall(r'x{2,3}', 'xxxxxxx') print(r34) # ['xxx','xxx','x'] # 5.x|y:|表示或,匹配的是x或y r35 = re.findall(r'[x|y]{2}', 'xxyyxy') print(r35) # ['xx', 'yy', 'xy'] # 6.?/*/+

贪婪匹配与非贪婪匹配

import re # 贪婪匹配:尽可能多的匹配 # 1.x?:匹配0个或者1个x r41 = re.findall(r'x?', 'xxxxx') print(r41) # ['x', 'x', 'x', 'x', 'x', ''] # 2.x*:匹配0个或者任意多个x(.* 表示匹配0个或者任意多个字符(换行符除外)) r42 = re.findall(r'x*', 'xxxxx') print(r42) # ['xxxxx', ''] # 3.x+:匹配至少一个x r43 = re.findall(r'x+', 'xxxxx') print(r43) # ['xxxxx'] # 非贪婪匹配:尽可能少的匹配,条件:在正则表达式的开头添加限制条件,则?可以将+或者*转换为非贪婪匹配 # 1. r51 = re.findall(r'666x+?', '666xxxxx') print(r51) # ['666x'] r52 = re.findall(r'x+?', '666xxxxx') print(r52) # ['x', 'x', 'x', 'x', 'x'] # 2. r53 = re.findall(r'666x*?', '666xxxxx') print(r53) # ['666'] r54 = re.findall(r'x*?', '666xxxxx') print(r54) # ['', '', '', '', 'x', '', 'x', '', 'x', '', 'x', '', 'x', '']
最新回复(0)