- 常用正则表达式
. :匹配任意一个字符
^ :匹配以什么开头的字符,如果放在中括号中表示取反,如 ^abc 表示匹配以 abc 开头的字符,[^abc] 表示匹配 abc 之外的字符
:匹配以什么结尾的字符*:匹配零个或多个星号前面的字符,如可以匹配、、、等等如可以匹配、、、等等,如abc?只能匹配ab、abc :用于转义,比如我要匹配 这个字符,但是用于匹配以什么结尾的字符,因此我就可以用来匹配用于匹配以什么结尾的字符,因此我就可以用$来匹配 这个字符
| :表示'或者',比如 ab|cd 可以匹配 'ab' 或 'cd'
{} :匹配指定个花括号前面的字符,如 ab{2} 可以匹配 abb ,也可以是一个范围,如 ab{1,4} 可以匹配 ab 、abb 、abbb 、abbbb
[] :匹配中括号中的任意一个字符,如 [0-9] 表示匹配 0~9 中的任意一个数字
() :如果用括号括起来表示一个整体,如 (ab){2} 把 ab 当成一个整体,只能匹配 abab ,另外还有(?P<name>....) 的形式,我们
知道用括号括起来的表示一个整体,比如 (abcdefg) 是一个整体,但如果括号里面的内容很长很长,那么我们访问这个整体的时候
是通过给这个整体取个别名的方式,即 (?P<name>....) 的方式,如 (?P<a>(abcdefg)) 表示把 (abcdefg) 这个整体取个别名 a ,
当我们访问的时候访问 a 就相当于访问 (abcdefg) ,在正则中这通常称为分组
\d :匹配任何数字,相当于 [0-9]
\D :匹配非数字字符,相当于 [^0-9]
\s :匹配任何空白字符,如空格、Tab制表符、换行符等
\S :匹配任何非空白字符
\w :匹配所有的字母和数字,相当于 [a-zA-Z0-9]
\W :匹配所有的非字母和数字,相当于[^a-zA-Z0-9]
- re正则对象和正则匹配效率比较
re.findall() :用于从一个字符串中匹配指定的字符
findall(string[, pos[, endpos]])
搜索string,以列表形式返回全部能匹配的子串
sub方法import re p1 = re.compile(r'\d+') a_str = 'one1two222three33four4' #正则对象的split方法,使用正则匹配进行分割字符串 #最后是以列表的形式返回 print(p1.split(a_str)) #正则对象的findall方法,来查找符合对象的子字符串 #最后是以列表的形式返回 print(p1.findall(a_str)) #finditer 每个返回值都是是一个对象,用group()方法查看, for i in p1.finditer(a_str): print(i.group())
sub(repl, string[, count])
使用repl替换string中每一个匹配的子串后返回替换后的字符串。
当repl是一个字符串时,可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。
当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count用于指定最多替换次数,不指定时全部替换。
match匹配对象import re p = re.compile(r'(\w+) (\w+)') s = 'i say,hello word!' print(p.sub(r'\2 \1',s)) def func(m): return m.group(1).title() + ' ' +m.group(2).title() print(p.sub(func,s)
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。上面的过程中多次使用了match对象,调用了他的group()和groups()等方法。
import re prog = re.compile(r'(?P<tagname>abc)(\w*)(?P=tagname)') result = prog.match('abclfjlad234sjldabc') # finiter 迭代以后每个对象都是一个matche对象 print(dir(result)) #查看match方法 print(result.group()) #group方法 print(result.groups()) print(result.group(2)) print(result.group(1)) print('####'*10 + 'tagname' + '####'*10) print(result.group('tagname')) #matche对象的group返回一个元组,下标是以1开头 print(result.groupdict())
python正则表达式
最新推荐文章于 2021-06-11 10:23:31 发布