正则表达式元字符:
字符匹配 :
复制代码
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
5a|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
29w :匹配字母数字 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
6import 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
15import 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
32import 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
32import 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模块内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复