Python 爬虫 - 正则表达式
“正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
- 整体介绍 - 教程:https://www.runoob.com/regexp/regexp-tutorial.html
- 在线解析和测试工具:https://www.sojson.com/regex/generate
代码 |
说明 |
. |
匹配除换行符以外的任意字符 |
\w |
匹配字母或数字或下划线 |
\s |
匹配任意的空白符 |
\d |
匹配数字 |
\b |
匹配单词的开始或结束 |
^ |
匹配字符串的开始 |
$ |
匹配字符串的结束 |
- 常用反义词
代码/语法 |
说明 |
\W |
匹配任意不是字母,数字,下划线,汉字的字符 |
\S |
匹配任意不是空白符的字符 |
\D |
匹配任意非数字的字符 |
\B |
匹配不是单词开头或结束的位置 |
[^x] |
匹配除了x以外的任意字符 |
[^aeiou] |
匹配除了aeiou这几个字母以外的任意字符
|
- 常用限定符
代码/语法 |
说明 |
* |
重复零次或更多次 |
+ |
重复一次或更多次 |
? |
重复零次或一次 |
{n} |
重复n次 |
{n,} |
重复n次或更多次 |
{n,m} |
重复n到m次 |
“原子是正则表达式的最基本的组成单位,而且在每个模式中最少包含一个原子。原子是由所有那些未显示指定为元字符的打印和非打印字符组成,所以在这里将其详细划分为五类进行介绍。”
①普通字符作为原子
普通字符是编写正则表达式时最常见的原子了,包括所有的大写和小写字母字符、所有数字等。例如,a——z、A——Z、0——9。
②一些特殊字符和元字符作为原子
任何一个符号都可以作为原子使用,但如果这个符号在正则表达式中有一些特殊意义,我们就必须使用转义字符“\”取消它的特殊意义,将其变成一个普通的原子。例如,所有标点符号以及一些其他符号,双引号“””、单引号“’”、“*”、“+”、“.”等,如果当原子就必须像\”、\’、\+和\.这样使用。
③一些非打印字符作为原子
所谓的非打印字符,是一些在字符串中的格式控制符号,例如空格、回车及制表符号等。例如下表所示列出了正则表达式中常用的非打印字符及其含义。
元字符(常用的元字符)
④使用“通用字符类型”作为原子
前面介绍的不管是打印字符还是非打印字符作为原子,都是一个原子只能匹配一个字符。而有时我们需要一个原子可以匹配一类字符,例如,匹配所有数字不是一个数字,匹配所有字母而不是一个字母,这时就要使用“通用字符类型”了。例如下表所示列出了正则表达式中常用“通用字符类型”及其含义。
⑤自定义原子表([])作为原子
c.模式修正符(常用的模式修正符)
“模式修正符就是几个字母,我们在每个正则表达式中可以一次使用一个,也可以连续使用多个,每一个具一定的意义。对整个正则表达式调优使用,也可以说是对正则表达式功能的扩展。”常用模式修正符有:
- i - 正则内容在匹配时候不区分大小写(默认是区分的)
- m - 在匹配首内容或者尾内容时候采用多行识别匹配
- s - 将转义回车/n取消是为单行匹配如.
- x - 忽略正则中的空白
- A - 强制从头开始匹配
- D - 强制$匹配尾部无任何内容包括/n
- U - 禁止贪婪匹配 只跟踪到最近的一个匹配符并结束,常用在采集程序上的正则表达式
d.贪婪模式与懒惰模式
正则表达式,表示重复字符,操作符,默认都是贪婪模式,'?,+,*,{}' 默认都会选择贪婪模式,会最大长度匹配字符串(量词默认首先最大匹配字符串,这些量词有:+,*,?,{m,n} 。一开始匹配,就直接匹配到最长字符串)。要切换到懒惰模式(懒惰模式),就只是在该元字符,后面加多一个”?” 即可切换到非贪婪模式(尽可能少地匹配所搜索的字符串)。
e.Python中常用的函数
- compile()
- match()
- search()
- split()
- sub()
- findall()