预定义匹配字符集 正则表达式中的一些表示方法,可以同时匹配某个预定义字符集中的任意一个字符。比如\d可以匹配·任意一个数字,虽然可以匹配其中任意字符,但是只能是一个,不是多个 \d 匹配任意一个数字,0~9中的任意一个 \w 匹配任意一个字母或数字或下划线,也就是A-Z a-z 0-9 _中的任意一个 \s 匹配空格、制表符、换页符等空白符的其中任意一个 \D 匹配\d的反集,也就是非数字的任意一个字符,等同于[^\d] \W \w的反集 \S \s的反集 重复匹配 前面的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符,其中任意一个的表达式,都只能匹配一次。但是有时候我们需要对某个字段进行重复匹配,例如手机号码18888888888,一般的新手可能会写成\d \d\d\d\d\d\d\d\d\d\d,不但写着费劲,看着也累,还不一定准确恰当。这种情况可以使用表达式再加上修饰匹配次数的特殊符号 {n} 匹配表达式重复n次,比如\d{2}相当于\d\d\d {m,n}匹配表达式至少重复m次,最多重复n次 {m,} 匹配表达式至少重复m次 ? 匹配表达式0次或者1次 + 匹配表达式出现1次到无限次 * 匹配表达式出现0次到无限次 位置匹配和非贪婪匹配 位置匹配 ,有时候我们对匹配出现的位置有要求,比如开头、结尾、单词之间等等 ^ 在字符串开始的地方匹配。符号本身不匹配任何字符 $ 在字符串结束的地方匹配,符号本身不匹配任何字符 贪婪与非贪婪模式 在重复匹配时,正则表达式默认总是尽可能多的匹配,这被称为贪婪模式.* 在重复匹配时,正则表达式总是尽可能少的匹配,这被称为非贪婪匹配.*? re模块常用方法 search(pattern,string,flags=0) 在文本内查找,返回第一个匹配到的字符串,它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头 findall(pattern,string,flags=0) 作为re模块的三大搜索函数之一,findall()和match(),search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表,这个列表没有group()方法,没有start、end、span,更不是匹配一个对象,而是一个列表,如果一项都没有匹配到就会返回一个空列表 complit(pattern,flags=0) 这个方法是re模块的工厂法,用于将字符串形式的正则表达式编译为pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用compile()完成一次转换后,再次使用该匹配模式的时候就不能进行转换了,经过complit()转换的正则表达式对象也能使用普通的re方法 flag匹配模式 re.I 使匹配对大小写不敏感,也就是不区分大小写的模式 re.S 使.这个通配符能够匹配包括换行在内的所有字符,针对多行匹配, split(pattern,string,maxsplit=0,flags=0) re模块的split()方法和字符串的split()方法相似,都是利用特定的字符去分割字符串,但是re模块的split()可以使用正则表达式,因此更灵活,更强大 sub() sub()方法类似字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数 分组供能 python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于二次过滤,实现分组靠圆括号(),而获取分组的内容靠的使group()、groups() 用正则表达式百度贴吧爬取海贼王图片