首页 技术 正文
技术 2022年11月8日
0 收藏 605 点赞 1,716 浏览 2278 个字

一、 正则表达式

使用python的re模块之前应该对正则表达式有一定的了解

正则表达式是对字符串操作的一种逻辑公式。我们一般使用正则表达式对字符串进行匹配和过滤。

正则的优缺点:

优点:灵活, 功能性强, 逻辑性强.

缺点:上手难,但一旦学会这东西非常好用

# 正则表达的组成:普通字符、元字符、限定符

普通字符不用说的,就是常用的字母,数字,汉字这些

python记录_day23 正则表达式  re模块

##贪婪匹配

.*    点星 表示尽可能多的匹配

## 惰性匹配

.*?  点星问号 尽可能少的匹配

##  转义

对 “\” 进行转义可以用 “\\” ,也可以在字符串开头加上r

## () 表示分组,括号内的表达式是一个整体     如果一个表达式中有分组,那么()后面的 \1 表示拿前边组的匹配结果

二、re模块

re模块是python提供的一套关于处理正则表达式的模块. 核心功能有四个:

re.search()      #搜索,搜到结果就返回,没有结果返回None

re.match()       #只能从头开始匹配  相当于默认加了^

re.findall()       #返回所有匹配项

re.finditer()      #返回所有匹配项的迭代器

 import re # 搜索,搜到结果就返回
ret = re.search("a","alex")
print(ret.group()) #结果要用group来取 #从头开始匹配,匹配到就返回
a = re.match('回','回眸一笑百媚生') #相当于匹配 ^a 默认加了开头符
print(a.group()) #返回所有匹配项 列表
lst =re.findall('a','alexa')
print(lst) #返回一个迭代器
ret = re.finditer('a','alexa')
for el in ret:
print(el.group())
print(el)

核心操作

##其他操作

re.split()      #根据正则表达式进行切割

re.split(“(表达式)”,”str”)      #切割后保留切割的内容

re.sub()   #替换

re.subn()    #替换    返回的是一个元组

re.compile(表达式, re.S)   #把正则表达式预加载    参数re.S能让惰性匹配忽略换行

注意:

在re中()的优先级比较高,会优先返回括号内匹配的内容

(?:)    在括号里加?:表示取消优先级

(?P<name>)       这样是给()匹配的内容命名

 #() 表优先级
b = re.findall(r'www\.(baidu|oldboy)\.com','www.baidu.com')
print(b) # ?:取消()优先级
c = re.findall(r'www.(?:baidu|oldboy).com','www.baidu.com')
print(c) #切割
ret = re.split('[ab]','github is a good websit')
print(ret) ret = re.split('([ab])','github is a good websit')
print(ret) #替换
ret = re.sub('good','well','github is a good website')
print(ret)
ret = re.subn('g','G','github is a good website')
print(ret) #预加载
a = re.compile(r'anala\b') # 正则中\b表示匹配结尾是什么什么
print(a)
ret = a.search('lexahanala')
print(ret.group()) #给组起名字
obj = re.compile(r'alex(?P<name>\d+)and(w)')
res = obj.search("alex250andwusir38ritian2")
print(res.group())
# for el in res.group():
# print(el)
print(res.group(2))
print(res.group('name'))

其他操作

 #豆瓣排行top250 from urllib.request import urlopen
import re #预加载正则表达式
obj = re.compile(r'<div class="item">.*?<span class="title">(?P<name>.*?)</span>.*?导演: (?P<director>.*?)&nbsp;&nbsp;&nbsp;.*?<span class="rating_num" property="v:average">(?P<fen>.*?)</span>',re.S)
#获取网页内容
def getContent(url):
content = urlopen(url).read().decode('utf-8')
return content #解析内容
def parseContent(content):
it = obj.finditer(content)
for el in it:
yield {
"电影名":el.group("name"),
"导演": el.group('director'),
"评分":el.group('fen')
} for i in range(10):
url = 'https://movie.douban.com/top250?start=%s&filter=' %(i*25)
g = parseContent(getContent(url))
f = open('douban.txt', mode='a', encoding='utf-8')
for el in g :
f.write(str(el)+'\n')
f.close()

练习

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,488
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,903
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,737
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,489
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,128
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,290