我是靠谱客的博主 爱笑秋天,最近开发中收集的这篇文章主要介绍python_正则_re模块,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 

正则表达式元字符:

字符匹配 :

.
:除换行符以外的任意单个字符
[]
:指定范围内字符
[^]
:指定范围外字符

次数匹配:

*
:任意次,0,1,多次
.*
:任意字符 任意次
?
:至多1次或0次
+
:至少出现1次或多次
{m}
:其前面字符出现m次
{m,n}
:其前面字符出现至少m次,至多n次
{m,}
:其前面字符出现至少m次
{,n}
:其前面字符出现至多n次 

位置锚定:

^
:匹配字符串的开头
$
:匹配字符串的末尾 

分组及引用:

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

或:

a|b
:a或者b
C|cat
:C或cat
(C|c)at :Cat或cat 

转义字符:

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个分组的子表达式 

 

小练习:

判断手机号码是否合法

根据手机号码一共11位并且是只以13、14、15、17、18开头的数字:
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('不是合法的手机号码')

匹配标签

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>

 

爬虫练习

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
豆瓣爬电影

 

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模块所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部