正则表达式:
. 匹配除换⾏行行符以外的任意字符
\w 匹配字⺟母或数字或下划线
\s 匹配任意的空⽩白符
\d 匹配数字
\n 匹配⼀一个换⾏行行符
\t 匹配⼀一个制表符
\b 匹配⼀一个单词的结尾
^ 匹配字符串串的开始
$ 匹配字符串串的结尾
\W 匹配⾮非字⺟母或数字或下划线
\D 匹配⾮非数字
\S 匹配⾮非空⽩白符
a|b 匹配字符a或字符b
() 匹配括号内的表达式,也表示⼀一个组
[...] 匹配字符组中的字符
[^...] 匹配除了了字符组中字符的所有字符
量词:
* 重复零次或更更多次
+ 重复⼀一次或更更多次
? 重复零次或⼀一次
{n} 重复n次
{n,} 重复n次或更更多次
{n,m} 重复n到m次
.*? XXX 的特殊含义,找到下一个XXX为止
Re模块
正则中分组(?P<name>.*?) 字典中的key,提取为value=ret.group("name")
1. findall 查找所有. 返回list
2. search 会进行匹配. 但是如果匹配到了了第⼀一个结果. 就会返回这个结果. 如果匹配不 上search返回的则是None
3. match 只能从字符串串的开头进⾏行行匹配,匹配到则返回结果
4. finditer 和findall差不多. 只不过这时返回的是迭代器
其他操作:
1. re.split(“[ab]”,”asdfasdfasfw”) 先按a分割得到的结果在对b进行分割 最后得到字典 (分割) 但是(ab)加上括号后就会在切割结果中保留切割部分[a,b,….]
2. re.sub(r”\d+”,”sb”,”sadfsdff1561dsfsd”)将字符串中的数字换成sb得到字符串 (替换)
3. re.subn(r”\d+”,”sb”,”sadfsdff1561dsfsd”) 将字符串中的数字转换成sb,返回元组( 替换结果, 替换的次数 )
4. obj=re.compile(r“正则内容”)将字符串编译成正则表达式 (obj为正则表达式)
5. ret=obj.search(“内容”),结果为按照正则表达式来匹配内容
爬虫重点:
Obj=re.compile(正则表达式)
Ret=obj.search(“范围”) 搜索 但一般用finditer(“查找范围”)
Ret.group()返回整个内容
Ret.group(“name”) 返回组的内容