我是靠谱客的博主 爱笑秋天,这篇文章主要介绍python_正则_re模块,现在分享给大家,希望可以做个参考。

 

正则表达式元字符:

字符匹配 :

复制代码
1
2
3
4
5
6
. :除换行符以外的任意单个字符 [] :指定范围内字符 [^] :指定范围外字符

次数匹配:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
* :任意次,0,1,多次 .* :任意字符 任意次 ? :至多1次或0次 + :至少出现1次或多次 {m} :其前面字符出现m次 {m,n} :其前面字符出现至少m次,至多n次 {m,} :其前面字符出现至少m次 {,n} :其前面字符出现至多n次 

位置锚定:

复制代码
1
2
3
4
^ :匹配字符串的开头 $ :匹配字符串的末尾 

分组及引用:

复制代码
1
2
3
4
5
() :分组,括号内模式会被记录于正则表达式引擎 后向引用 :1 2 3..... 

或:

复制代码
1
2
3
4
5
a|b :a或者b C|cat :C或cat (C|c)at :Cat或cat 

转义字符:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
w :匹配字母数字 W :匹配非字母数字 s :匹配任意空白字符,等价于 [tnrf]. S :匹配任意非空字符 d :匹配任意数字,等价于 [0-9]. D :匹配任意非数字 A :匹配字符串开始 Z :匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串 z :匹配字符串结束 G :匹配最后匹配完成的位置。 b :匹配一个单词边界,也就是指单词和空格间的位置。例如, 'erb' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 B :匹配非单词边界。'erB' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。 n :匹配一个换行符 t :匹配一个制表符 1...9 :匹配第n个分组的子表达式 

 

小练习:

判断手机号码是否合法

复制代码
1
根据手机号码一共11位并且是只以13、14、15、17、18开头的数字:
复制代码
1
2
3
4
5
6
import re phone_number = input('please input your phone number : ') if re.match('^(13|14|15|17|18)[0-9]{9}$',phone_number): print('是合法的手机号码') else: print('不是合法的手机号码')

匹配标签

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re ret = re.search("<(?P<tag_name>w+)>w+</(?P=tag_name)>","<h1>hello</h1>") #还可以在分组中利用?<name>的形式给分组起名字 #获取的匹配结果可以直接用group('名字')拿到对应的值 print(ret.group('tag_name')) #结果 :h1 print(ret.group()) #结果 :<h1>hello</h1> ret = re.search(r"<(w+)>w+</1>","<h1>hello</h1>") #如果不给组起名字,也可以用序号来找到对应的组,表示要找的内容和前面的组内容一致 #获取的匹配结果可以直接用group(序号)拿到对应的值 print(ret.group(1)) print(ret.group()) #结果 :<h1>hello</h1>

 

爬虫练习

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import requests import re import json def getPage(url): response=requests.get(url) return response.text def parsePage(s): com=re.compile('<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>' '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>',re.S) ret=com.finditer(s) for i in ret: yield { "id":i.group("id"), "title":i.group("title"), "rating_num":i.group("rating_num"), "comment_num":i.group("comment_num"), } def main(num): url='https://movie.douban.com/top250?start=%s&filter='%num response_html=getPage(url) ret=parsePage(response_html) print(ret) f=open("move_info7","a",encoding="utf8") for obj in ret: print(obj) data=json.dumps(obj,ensure_ascii=False) f.write(data+"n") if __name__ == '__main__': count=0 for i in range(10): main(count) count+=25
豆瓣爬电影

 

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import re import json from urllib.request import urlopen def getPage(url): response = urlopen(url) return response.read().decode('utf-8') def parsePage(s): com = re.compile( '<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>d+).*?<span class="title">(?P<title>.*?)</span>' '.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>', re.S) ret = com.finditer(s) for i in ret: yield { "id": i.group("id"), "title": i.group("title"), "rating_num": i.group("rating_num"), "comment_num": i.group("comment_num"), } def main(num): url = 'https://movie.douban.com/top250?start=%s&filter=' % num response_html = getPage(url) ret = parsePage(response_html) print(ret) f = open("move_info7", "a", encoding="utf8") for obj in ret: print(obj) data = str(obj) f.write(data + "n") count = 0 for i in range(10): main(count) count += 25
简化版

 

 

 

转载于:https://www.cnblogs.com/qinxin1/p/10336333.html

最后

以上就是爱笑秋天最近收集整理的关于python_正则_re模块的全部内容,更多相关python_正则_re模块内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部