python 3.x 爬虫基础---正则表达式(案例:爬取猫眼信息,写入txt,csv,下载图片)

python 3.x 爬虫基础

python 3.x 爬虫基础---http headers详解

python 3.x 爬虫基础---Urllib详解

python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)

python 3.x 爬虫基础---正则表达式

前言

  正则表达式是对字符串的一种逻辑公式,用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则的字符串”,此字符串用来表示对字符串的一种“过滤”逻辑。正在在很多开发语言中都存在,而非python独有。对其知识点进行总结后,会写一个demo。

1.正则表达式

  python是自1.5开始引进re模块进行处理正则的。我先把正则的匹配规则总结一下,再总结re模块相应的方法。

1.1匹配规则 语法 解释 表达式 成功匹配对象
一般字符   匹配自身相对应的字符   abc   abc  
.   匹配除换行符(\n)以外的任意字符   a.c   abc  
\   转义字符,可以改变原字符的意思   a.c   a.c  
\d   匹配数字:0~9   \dabc   1abc  
\w   匹配单词字符,a~z;A~Z;0~9   \w\w\w   oX2  
\s   匹配空格字符(\t,\n,\r,\f,\v)   a\sc   a c  
\D   匹配非数字字符   \Dabc   aabc  
\W   匹配非单词字符   a\Wc   a c  
\S   匹配非空格字符   \S\Sc   1bc  
[]   字符集,对应位置上可以是字符集里的任意字符   a[def]c   aec  
[^]   对字符集当中的内容进行取反   a[^def]c   a2c  
[a-z]   指定一个范围字符集   a[A-Z]c   aBc  
*   允许前一个字符可以出现0次或者无限次   a*b   aaab或b  
+   前一个字符至少出现1次   a+b   aaab或ab  
?   前一个字符只能出现一次或者不出现   a?b   ab或b  
{m}   允许前一个字符只能出现m次   a{3}b   aaab  
{m,n}   允许前一个字符至少出现m次,最多出现n次(如果不写n,则代表至少出现m次)   a{3,5}b和a{3,}   aaaab和aaaaaab  
^   匹配字符串的开始,多行内容时匹配每一行的开始   ^abc   abc  
$   匹配字符串的结尾,多行内容时匹配每一行的结尾   abc&   abc  
\A   匹配字符串开始位置,忽略多行模式   \Aabc   abc  
\Z   匹配字符串结束位置,忽略多行模式   abc\Z   abc  
\b   匹配位于单词开始或结束位置的空字符串   hello \bworld   hello world  
\B   匹配不位于单词开始或结束位置的空字符串   he\Bllo   hello  
|   表示左右表达式任意满足一种即可   abc|cba   abc或cba  
(…)   将被括起来的表达式作为一个分组,可以使用索引单独取出   (abc)d   abcd  
(?P<name>…)   为该分组起一个名字,可以用索引或名字去除该分组   (?P<id>abc)d   abcd  
\number   引用索引为number中的内容   (abc)d\1   abcdabc  
(?P=name)   引用该name分组中的内容   (?P<id>abc)d(?P=id)   abcdabc  
(?:…)   分组的不捕获模式,计算索引时会跳过这个分组   (?:a)b(c)d\1   abcdc  
(?iLmsux)   分组中可以设置模式,iLmsux之中的每个字符代表一个模式   (?i)abc   Abc  
(?#…)   注释,#后面的内容会被忽略   ab(?#注释)123   ab123  
(?=…)   顺序肯定环视,表示所在位置右侧能够匹配括号内正则   a(?=\d)   a1最后的结果得到a  
(?!…)   顺序否定环视,表示所在位置右侧不能匹配括号内正则   a(?!\w)   a c最后的结果得到a  
(?<=…)   逆序肯定环视,表示所在位置左侧能够匹配括号内正则   1(?<=\w)a   1a  
(?<!…)   逆序否定环视,表示所在位置左侧不能匹配括号内正则   1 (?<!\w)a   1 a  
(?(id/name)yes|no)   如果前面的索引为id或者名字为name的分组匹配成功则匹配yes区域的表达式,否则匹配no区域的表达式,no可以省略   (\d)(?(1)\d|a)   32  

  上面表格中(?iLmsux)这里的”i”, “L”, “m”, “s”, “u”, “x”,它们不匹配任何字串,而对应re模块中(re.S|re.S):

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxsjj.html