正则表达式
描述:正则表达式能够从一段文本中提取有用的信息。
0、使用正则表达式有如下步骤:
(1)寻找规律;
(2)使用正则符号表示规律
(3)提取信息
1、正则表达式的基本符号
1.1 点号“.”
一个点号可以代替除了换行符以外的任何一个字符,包括但不限于英文字母、数字、汉字、英文标点符号和中文标点符号。
1.2 星号“*”
一个星号可以表示它前面的一个子表达式(普通字符、另一个或几个正则表达式符号)0次到无限次。
1.3 问号“?”
问号表示它前面的子表达式0次或者1次。
1.4 反斜杠“\”
配合使用把特殊字符变成普通符号,把普通符号变成特殊字符。
1.5 转义字符表
转移字符 | 意义 |
\n | 换行符 |
\t | 制表符 |
\\ | 普通反斜杠 |
\‘ | 单引号 |
\" | 双引号 |
\d | 数字 |
1.6 小括号
小括号可以把括号里面的内容提取出来。
2、在python中使用正则表达式
2.1 python自带的正则表达式模块re(regular expression)
2.1.1 导入re
1 import re
2.1.2 findall
findall()方法,它能够以列表的形式返回所有满足要求的字符串
findall()的函数模型为:
1 re.findall(pattern, string, flags=0) #pattern表示正则表达式, string表示原来的字符串, flags表示一些特殊功能的标签
提示:(1)如果包含多个(.*?)返回的仍然是一个列表,但是列表里面的元素变成了元组。
(2)flags参数可以省略,不省略时具有一些辅助功能,如要忽略换行符,就需要使用re.S这个flag。
2.1.3 search
search()方法,只会返回第1个满足要求的字符串,一旦找到符合要求的内容,它就会停止查找。
search()的函数模型为:
1 re.search(pattern, string, flags=0)
提示:(1)如果需要得到匹配到的结果,则需要通过group()这个方法来获取里面的值
(2)只有在.group()里面的参数为1的时候,才会把正则表达式里面的括号中的结果打印出来。
(3).group()的参数最大不能超过正则表达式里面括号的个数。
2.1.4 “.*”和“.*?”的区别
“.*”表示匹配一个能满足要求的最长字符串
“.*?”表示匹配一个能满足要求的最短字符串
3、正则表达式提取技巧
3.1 不需要compile
3.2 先抓大再抓小
先抓大再抓小的思想会贯穿整个爬虫开发过程。