一文速通的正则表达式

正则表达式

  • 是由普通字符(例如字符 a 到 z)以及元字符组成的字符串
  • 该字符串描述了按照某种模式去匹配要被搜索的字符串

普通字符

  • 包括没有显式指定为元字符的所有可打印不可打印字符
  • 即包括所有大写和小写字母、所有数字、所有标点符号和一些其他符号
  • 普通字符只能匹配它自己

特殊字符: 字符’'加一个字符(某些)组成的字符

字符 描述
\w 匹配字母、数字及下划线
\W 匹配不是字母、数字及下划线的字符
\d 匹配任意数字,等价于 [0-9]
\D 匹配任意非数字的字符
\A 匹配字符串开头
\Z 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串
\z 匹配字符串结尾,如果存在换行,同时还会匹配换行符
\s 匹配任何空白字符
\S 匹配任何非空白字符
\f 匹配一个换页符
\n 匹配一个换行符
\r 匹配一个回车符
\t 匹配一个制表符

最后四个并不常用

元字符

  • 如果要匹配元字符本身的话要在该字符前加’’ 例如:. 可以匹配 .
字符 描述
^xxx 如果字符串以xxx开头,匹配xxx(是普通字符)
yyy$ 如果字符串以yyy结尾,匹配yyy(与xxx一样)
* 匹配前面的单字符零次或多次
+ 匹配前面的单字符一次或多次
? 匹配前面的单字符零次或一次
{n} 匹配左侧紧邻的单字符 n 次(n>=0)
{n,} 至少匹配左侧紧邻的单字符 n 次(n>=0)
{n,m} 尽可能多的匹配左侧紧邻的单字符,但匹配次数间于[n,m]之间 (0<=n<=m)
. 匹配除换行符之外的任何一个字符
a|b 先匹配a,匹配不上,在匹配b
[xyz] 匹配[]所包含的任意一个字符
[^xyz] 匹配[]未包含的任意字符, 即与[xyz]匹配结果相反
[a-z] 匹配指定范围(这里是a-z)内的任意字符
[^a-z] 匹配任何不在指定范围内的任意字符, 即与[a-z]匹配结果相反
() 匹配括号内的表达式(会被标记,被标记表达式会依次对应每一个分组)

贪婪与非贪婪

  1. 贪婪模式:尽可能多的匹配所搜索的字符串。
  • 元字符 (*, +, ?, {n}, {n,}, {n,m})的匹配模式是贪婪的
pattern  = '^He.*(\d+).*Demo$'
content = 'Hello 1234567 World_This is a Regex Demo'

# 当.* 匹配到 Hello 后面的空白字符时,而后面的字符 \d+ 也能可以匹配,它会继续匹配,而不是由\d+来匹配——贪婪
  1. 非贪婪模式:尽可能少的匹配所搜索的字符串
  2. 贪婪的元字符后面紧跟元字符**?**时他们是非贪婪的
patern = '^He.*?(\d+).*Demo$'
content = 'Hello 1234567 World_This is a Regex Demo'
# 当.*? 匹配到 Hello 后面的空白字符时,而后面的字符 \d+ 恰好可以匹配,那么这里 .*? 就不再进行匹配,由\d+ 去匹配后面的数字  ——非贪婪

技巧

  • 匹配任何字符: [\s\S]

继续学习

  • 一个练习正则的网站:这个网站需要你们编写正则表达式和提供待匹配的文本,是个新手熟悉正则表达式很好的资源
  • 爬虫学习——警察叔叔不抓我
  • python中使用正则表达式——为所欲为:一篇教你如何在python使用正则表达式来匹配文本
  • 爬取“百思不得姐“网站——小试牛刀:教你在如何在实际中使用正则来完成对爬取的内容进行数据提取

你可能感兴趣的:(爬虫,正则表达式,爬虫,python)