Python正则表达式
来源:互联网 发布:淘宝碧素堂面膜怎么样 编辑:程序博客网 时间:2024/06/04 22:26
主要内容:
1.正则表达式基本概念
2.python正则表达式re模块
3.正则表达式语法
4.re模块相关方法使用
正则表达式概念:
1.使用单个字符串来描述匹配一系列符合某个句法规则的字符串
2.是对字符串操作的一种逻辑公式
3.处理文本和数据
4.正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;否则匹配失败。
python第一个正则表达式:
1.import re:正则表达式模块
2.第一个正则表达式:
r‘imooc’→Pattern→Match→resultimport re #导入re模块生成pattern对象:pa = re.compile(r'imooc') #匹配的字符生成match对象:ma = pa.match('imooc.com') #被匹配的字符ma.group() ==>imooc #返回匹配的字符 ma.span() ==>(0,5) #被匹配字符串所在索引位置ma.string() ==>'imooc.com' #返回被匹配字符串ma.re ==>re.compile(r'imooc') #返回实例
正常匹配需要使用compile、match方法,先生成一个pattern对象,再生成一个match对象。pattern对象相当于将匹配字符串进行了包装,便于之后的match(匹配)。生成的的match对象是将原字符串与匹配字符串进行比较,将匹配成功的结果存入match对象中。使用group()方法可以将匹配成功的结果打印出来。
正则表达式语法:
.→ 匹配所有字符(除了换行符\n)
[…]→ 匹配字符集[a-zA-Z0-9]
\d/\D→ 匹配数字/匹配非数字
\s/\S →匹配空白字符/匹配非空白字符
\w/\W →匹配单词字符[a-zA-Z0-9](,.等都不能匹配)/匹配非单词字符(,.等都能匹配)
* →匹配前一个字符0次或者无限次
+ →匹配前一个字符1次或者无限次
? →匹配前一个字符0次或者1次
{m}/{n-m} →匹配前一个字符m次或者m-n次
*?/+?/?? →匹配模式变为非贪婪(尽可能少匹配字符)
^→ 匹配字符串的开头
$ →匹配字符串的结尾
| →匹配左右任意一个表达式,或
\A/ \Z→指定的字符串必须出现在开头/结尾
(ab)→ 括号中表达式作为一个分组
\→ 引用编号为number的分组匹配到的字符串
(?P) →分组起别名
(?P=name) →引用别名为name的分组匹配字符串
re=re.match(r'[_a-zA-Z]+[_\w]*','_htll')ma.group #返回_htll,有效re=re.match(r'[_a-zA-Z]+[_\w]*','[htll')ma.group #无效ma=re.match(r'[1-9]?[0-9]','99')ma.group #有效ma=re.match(r'[1-9]?[0-9]','9')ma.group #有效ma=re.match(r'[1-9]?[0-9]','09')ma.group #只匹配了0ma=re.match(r'[a-zA-Z0-9]{6}','abc123')ma.group #有效ma=re.match(r'[a-zA-Z0-9]{6}','abc1234')ma.group #只匹配到abc123ma=re.match(r'[a-zA-Z0-9]{6}','abc12_')ma.group #无效ma=re.match(r'[a-zA-Z0-9]{6,10}@163.com','abc123@163.com')ma.group #有效ma=re.match(r'[a-zA-Z0-9]{6,10}@163.com','abcedu12345@163.com')ma.group #无效,长度超出ma=re.match(r'[0-9][a-z]*','1bc')ma.group #贪婪模式,匹配到1bcma=re.match(r'[0-9][a-z]*?','1bc')ma.group #非贪婪模式,尽可能少匹配,匹配到1。ma=re.match(r'[\w]{4,10}@163.com','abc123@163.comabc')ma.group #匹配到abc123@163.comma=re.match(r'[a-zA-Z0-9]{6,10}@163.com$','abc123@163.comabc')ma.group #无效,必须以@163.com结尾ma=re.match(r'<[\w]+>','<book>')ma.group #有效ma=re.match(r'<([\w]+>)','<book>')ma.group #有效ma=re.match(r'<([\w]+>)\1','<book>book>')ma.group #有效
() 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
(\s*)表示连续空格的字符串。
[]是定义匹配的字符范围。比如[a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。
[\s*]表示空格或者*号。
{}一般用来表示匹配的长度,比如 \s{3}表示匹配三个空格,\s[1,3]表示匹配一到三个空格。 (0-9) 匹配 ‘0-9′ 本身。 [0-9]* 匹配数字(注意后面有*,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。 [0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
re模块其他方法
search(pattern, string, flags=0) #在一个字符串中查找匹配
findall(pattern, string, flags=0) #返回所有匹配的列表集合
sub(pattern, repl, string, count=0, flags=0) #匹配部分替换为其他值
split(pattern, string, maxsplit=0, flags=0) #根据匹配分割字符串,返回分割字符串组成的列表
练习
抓取网页中的图片到本地:
1,抓取网页
2,获取图片地址
3.抓取图片内容并保存到本地
import urllib3import rehttp = urllib3.PoolManager()# 1: site urlreq = http.request('GET', 'http://www.imooc.com/course/list')content = req.data.decode('utf-8')# 2: picture urlslisturl = re.findall(r'src=.+\.jpg', content)pic_url_list = map(lambda x : x[:4], listurl)# 3: write picturesi = 0for url in pic_url_list: # open as a binary file f = open(str(i)+ '.jpg', 'wb') f.write(http.request('GET', url).data) f.close() i += 1
- python正则表达式学习
- c++正则表达式,python
- Python正则表达式(一)
- python的正则表达式
- Python正则表达式
- Python初学-正则表达式
- 正则表达式与python
- python正则表达式学习
- python正则表达式学习
- python正则表达式学习
- python正则表达式
- Python - 正则表达式
- Python正则表达式
- python正则表达式
- Python正则表达式指南
- Python正则表达式指南
- Python 正则表达式指南
- python 正则表达式
- 数据库语言的个人笔记
- javaScript 笔记
- Spring MVC之DispatcherServlet解析
- MyBatis事物处理
- Myeclipse2014编辑JavaScript点"."的时候会卡死的解决办法
- Python正则表达式
- Android跨进程通信中,对Binder的不完全理解
- windows之UIAutomation鼠标操作
- web uploader在Firefox下上传点击无效的解决方法
- 如何设置输入框input中placeholder的字体颜色、字号
- Java集合框架之_泛型
- hdu4405[Aeroplane chess] 有点懂了期望概率DP
- Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
- 编写MANIFEST.MF文件时的注意事项: