1.介绍
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
用途:用于匹配特定位置的字符串方便拿到所需的内容 + 检验当前字符是否符合要求 + 替换特定字符串
import re
1.普通字符
字符 | 描述 |
---|
[a-zA-Z0-9] | 匹配26个大小写英文字母和数字 |
[a] | 匹配特定字符串-a |
2.常用字符
字符 | 描述 |
---|
. | 匹配换行符以外的任意字符 |
\w | 匹配字母/数字/下划线 = [a-zA-Z0-9_] |
\W | 匹配非(字母/数字/下划线) |
\s | 匹配任意的空白符(包括换行) |
\S | 匹配非空白符,不包括换行 |
\d | 匹配数字 |
\D | 匹配非数字 |
\n | 匹配换行符 |
\t | 匹配制表符 |
^ | 匹配字符串的开始 |
$ | 匹配字符串的结尾 |
(a或b) | 匹配a字符串或b字符串 |
[…] | 匹配字符组中的字符 |
[^…] | 匹配非字符组中的字符 |
3.限定字符
字符 | 描述 |
---|
* | 出现 0 次或多次 >= 0 |
+ | 出现 1 次或多次 >= 1 |
? | 出现 1 次或 0 次 |
{n} | 重复 n 次 |
{n, } | 重复 n 次或更多次 >= n |
3.贪婪匹配与惰性匹配
字符 | 描述 |
---|
.* | 匹配符合的所有字符串 |
.*? | 尽可能少的匹配,最小匹配 |
2.Re匹配豆瓣250电影信息
import requests
import re
import csv
head = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
}
url = "https://movie.douban.com/top250"
obj = re.compile(r'<li>.*?<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?'
r'<p class="">.*?<br>(?P<year>.*?) .*?'
r'<span class="rating_num" property="v:average">(?P<score>.*?)</span>.*?'
r'<span>(?P<num>.*?)人评价</span>', re.S)
f = open("data.csv", mode='w', encoding="utf-8")
csv_writer = csv.writer(f)
for i in range(0, 10):
base_url = url + "?start=25&filter=" + str(i)
resp = requests.get(base_url, headers=head)
page_content = resp.text
result = obj.finditer(page_content)
for item in result:
dic = item.groupdict()
dic['year'] = dic['year'].strip()
csv_writer.writerow(dic.values())
f.close()
print("over")
resp.close()
Tips:可以在 在线正则表达式测试 练习Re