Python学习之旅
Python核心编程爬虫篇2021.03.16
指导教师:逻辑教育讲师Jerry
一、正则表达式概念
正则表达式是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个规则字符串。是用来对字符串的过滤逻辑公式。
二、应用场景
- 表单验证,例如 : 手机号、邮箱、身份证等
- 爬虫数据提取
三、正则表达式的使用(对Python的支持)
1、普通字符
- 正则表达式中的普通字符,在匹配的时候,只匹配与自身相同的一个字符
- 例如:达式c,在匹配字符串abcde时,匹配结果是:成功;匹配到的内容是c;匹配到的位置开始于2,结束于3。(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)
2、元字符
正则表达式中使用了很多元字符,用来表示这些特殊的含义或功能
表达式 | 匹配 |
---|---|
. |
匹配除了换行符\n 以外的任意字符 |
| |
逻辑或操作符 |
[] |
匹配字符集中的一个字符 |
[^] |
对字符集求反,^ 必须放在前面 |
- |
定义[] 里的一个区间,例如a-z |
\ |
对一些具有特殊功能的字符进行转义 |
() |
对表达式进行分组,将括号内的内容当做整体,并获得其所匹配的值 |
3、预定义匹配字符集
正则表达式中的一些表示方法,可以同时匹配某个预定义字符集中的任意一个
字符。比如,表达式\d
可以匹配任意一个数字,但是只能是一个,不是多个。
表达式 | 匹配 |
---|---|
\d |
0-9 中的任意一个数字 |
\w |
a-z ,A-Z ,0-9 ,_ 中的任意一个字符 |
\s |
空格、制表符、换页符等空白字符中的任意一个字符 |
\D |
\d 的反集,非数字中的任意一个字符,等同于[^\d] |
\W |
\w 的反集,等同于[^\w] |
\S |
\s 的反集,等同于[^\s] |
4、重复匹配
为了对某个字段进行重复匹配,例如手机号码13666666666
,可以使用表达式再加上修饰匹配次数的特殊符号{}
,例如[abcd][abcd]
可以写成[abcd]{2}
表达式 | 匹配 |
---|---|
{n} |
表达式重复n 次,比如a{3} 相当于aaa |
{m,n} |
表达式至少重复m 次,至多重复n 次,比如ab{1,3} 可匹配ab ,abb ,abbb |
{ m,} |
表达式至少重复m 次 |
? |
匹配表达式0 次或者1 次,相当于{0,1} 比如 a[cd]? 可以匹配a ,ac ,ab |
+ |
表达式至少重复1 次 ,相当于{1,} ,比如a+b 可以匹配ab ,aab ,aaab 等 |
* |
表达式重复0 次到任意次,相当于{0,} ,比如\^*b ,可以匹配b ,^b ,^^b ,^^^b 等 |
5、位置匹配
有时候,我们对匹配出现的位置有要求,如开头、结尾、单词之间等等
表达式 | 匹配 |
---|---|
^ |
在字符串开始的地方匹配 |
$ |
在字符串结束的地方匹配 |
\b |
匹配一个单词的边界(单词和空格之间的位置) |
\B |
匹配非单词边界 |
6、贪婪与非贪婪匹配
- 贪婪匹配:以最长的结果作为返回 在Python当中默认是贪婪的 总是去尝试匹配尽可能多的字符
- 非贪婪匹配:总是尝试去匹配尽可能少的字符,例如
.*
加?
,.+
加?
,{m,n}
加?
"""非贪婪匹配"""
import