. 表示任意字符
*, +, ? '*'表示匹配前一个字符重复 0 次到无限次,'+'表示匹配前一个字符重复 1次到无限次,'?'表示匹配前一个字符重复 0 次到1次
*?, +?, ?? 前面的*,+,?等都是贪婪匹配,也就是尽可能多匹配,后面加?号使其变成惰性匹配即非贪婪匹配
re.S 将“\n”当做一个普通的字符加入到这个字符串中
| 表示或者
\ 对特殊字符进行转义
\\ 将特殊字符转为普通字符
[] 表示一个字符集
(...) 作为一个分组. findall 在有组的情况下只显示组的内容
^ 表示字符串开头
$ 表示字符串结尾
\s 匹配任意空白字符,相当于 [ \t\n\r\f\v]
\s+$ 匹配空行
\d 匹配任意十进制数,相当于 [0-9]
\w 匹配任意数字和字母,相当于 [a-zA-Z0-9_]
re.findall(r'<p>(.*?)</p>', content, re.S | re.M) 能够以列表的形式返回能匹配的子串, 即能抓取网页中段落内容
re.match(r'\s', line) 匹配以空格开头的字符串, 没有则返回None
re.sub(r'<a(.*?)>|</a>|<strong>|</strong>','',line) 替换函数,把<a ...>、</a>、<strong>、</strong>都替换为空,即删除
参考教程:
https://www.cnblogs.com/yyyg/p/5498803.html
https://www.runoob.com/python/python-reg-expressions.html