我的第六篇python爬虫博客《正则表达式二》

预定义匹配字符集

正则表达式中的一些表示方法,可以同时匹配某个预定义字符集中的任意一个字符。比如\d可以匹配·任意一个数字,虽然可以匹配其中任意字符,但是只能是一个,不是多个

\d 匹配任意一个数字,0~9中的任意一个我的第六篇python爬虫博客《正则表达式二》_第1张图片

\w 匹配任意一个字母或数字或下划线,也就是A-Z a-z 0-9 _中的任意一个我的第六篇python爬虫博客《正则表达式二》_第2张图片

\s 匹配空格、制表符、换页符等空白符的其中任意一个

我的第六篇python爬虫博客《正则表达式二》_第3张图片

\D 匹配\d的反集,也就是非数字的任意一个字符,等同于[^\d]

我的第六篇python爬虫博客《正则表达式二》_第4张图片

\W \w的反集

\S \s的反集

重复匹配

前面的表达式,无论是只能匹配一种字符的表达式,还是可以匹配多种字符,其中任意一个的表达式,都只能匹配一次。但是有时候我们需要对某个字段进行重复匹配,例如手机号码18888888888,一般的新手可能会写成\d

\d\d\d\d\d\d\d\d\d\d,不但写着费劲,看着也累,还不一定准确恰当。这种情况可以使用表达式再加上修饰匹配次数的特殊符号

{n} 匹配表达式重复n次,比如\d{2}相当于\d\d\d

我的第六篇python爬虫博客《正则表达式二》_第5张图片

{m,n}匹配表达式至少重复m次,最多重复n次

我的第六篇python爬虫博客《正则表达式二》_第6张图片

{m,} 匹配表达式至少重复m次

我的第六篇python爬虫博客《正则表达式二》_第7张图片

? 匹配表达式0次或者1次

我的第六篇python爬虫博客《正则表达式二》_第8张图片

+ 匹配表达式出现1次到无限次

我的第六篇python爬虫博客《正则表达式二》_第9张图片

* 匹配表达式出现0次到无限次

我的第六篇python爬虫博客《正则表达式二》_第10张图片

位置匹配和非贪婪匹配

位置匹配 ,有时候我们对匹配出现的位置有要求,比如开头、结尾、单词之间等等

^ 在字符串开始的地方匹配。符号本身不匹配任何字符

$ 在字符串结束的地方匹配,符号本身不匹配任何字符

贪婪与非贪婪模式

在重复匹配时,正则表达式默认总是尽可能多的匹配,这被称为贪婪模式.*

我的第六篇python爬虫博客《正则表达式二》_第11张图片

在重复匹配时,正则表达式总是尽可能少的匹配,这被称为非贪婪匹配.*?

我的第六篇python爬虫博客《正则表达式二》_第12张图片

re模块常用方法

search(pattern,string,flags=0)

在文本内查找,返回第一个匹配到的字符串,它的返回值类型和使用方法与match()是一样的,唯一的区别就是查找的位置不用固定在文本的开头

我的第六篇python爬虫博客《正则表达式二》_第13张图片

findall(pattern,string,flags=0)

作为re模块的三大搜索函数之一,findall()和match(),search()的不同之处在于,前两者都是单值匹配,找到一个就忽略后面,直接返回不再查找了。而findall是全文查找,它的返回值是一个匹配到的字符串的列表,这个列表没有group()方法,没有start、end、span,更不是匹配一个对象,而是一个列表,如果一项都没有匹配到就会返回一个空列表

我的第六篇python爬虫博客《正则表达式二》_第14张图片

complit(pattern,flags=0)

这个方法是re模块的工厂法,用于将字符串形式的正则表达式编译为pattern模式对象,可以实现更加效率的匹配。第二个参数flag是匹配模式 使用compile()完成一次转换后,再次使用该匹配模式的时候就不能进行转换了,经过complit()转换的正则表达式对象也能使用普通的re方法

我的第六篇python爬虫博客《正则表达式二》_第15张图片

flag匹配模式

re.I 使匹配对大小写不敏感,也就是不区分大小写的模式

我的第六篇python爬虫博客《正则表达式二》_第16张图片

re.S 使.这个通配符能够匹配包括换行在内的所有字符,针对多行匹配,

我的第六篇python爬虫博客《正则表达式二》_第17张图片

split(pattern,string,maxsplit=0,flags=0)

re模块的split()方法和字符串的split()方法相似,都是利用特定的字符去分割字符串,但是re模块的split()可以使用正则表达式,因此更灵活,更强大

sub()

sub()方法类似字符串的replace()方法,用指定的内容替换匹配到的字符,可以指定替换次数

我的第六篇python爬虫博客《正则表达式二》_第18张图片

分组供能

python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容再筛选出需要的内容,相当于二次过滤,实现分组靠圆括号(),而获取分组的内容靠的使group()、groups()

我的第六篇python爬虫博客《正则表达式二》_第19张图片

用正则表达式百度贴吧爬取海贼王图片

我的第六篇python爬虫博客《正则表达式二》_第20张图片

你可能感兴趣的:(我的第六篇python爬虫博客《正则表达式二》)