1.使用单个字符串来描述匹配一系列符合其语法规则的字符串
2.是对字符串操作的一种逻辑公式
3.处理文本和数据
4.正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功、否则匹配失败。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time : 2019/9/17 13:38
@Author : 我是天才很好
@Blog : https://blog.csdn.net/weixin_43593330
@Email : [email protected]
@File : test1.py
@Software: PyCharm
"""
def find_start_imooc(fname):
'''
找到imooc开头的语句
:param fname:
:return:
'''
f = open(fname)
for line in f:
if line.startswith('imooc'):
print(line)
def find_in_imooc(fname):
'''
找到imooc开头和结尾的语句
:param fname:
:return:
'''
f = open(fname)
for line in f:
if line.startswith('imooc')\
and line.endswith('imooc\n'): # and line[:,-1].endswith('imooc'):
print(line)
if __name__ == "__main__":
# find_start_imooc('imooc.txt')
find_in_imooc('imooc.txt')
# 导入re模块
import re
# 生成pattern对象
pa = re.compile(r'imooc') # 匹配的字符
# 生成match对象
ma = pa.match('imooc.com') # 被匹配的字符
print(ma.group()) # 返回匹配字符串或元组 ==>imooc
print(ma.span()) # 被匹配字符串所在索引位置 ==>(0,5)
print(ma.string) # 返回被匹配字符串 ==>'imooc.com'
print(ma.re) # 返回匹配实例
print(ma.groups()) # 返回一个元组 pa = re.compile(r'(imooc)')
pa = re.compile(r'(imooc)',re.I) # 匹配忽略大小写
pa=re.compile(r'imooc',re.I) # re.I的用法是忽略匹配字符串中的大小写
ma=pa.match(str1) # 生成pa.match的实例对象
这两步等价于 ma = re.match(r'imooc',str1)
注意:
对于程序,如果需要做大量的正则匹配,而正则表达式只有一个,尽量避开直接使用re.match(关键字,被匹配串)这种方法。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用象 '[.\n]' 的模式。
[...] 匹配字符集
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\w 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
* 匹配前一个字符0次或者无限次
+ 匹配前一个字符1次或者无限次
? 匹配前一个字符0次或者1次
{m}/{m,n} 匹配前一个字符m次或者n次
*?/+?/?? 匹配模式变为非贪婪(尽可能少匹配字符)
# [A-Z][a-z]* Adasdas * = 0到无穷大
ma = re.match(r'[A-Z][a-z]*','Afsdsdf')
# [_a-zA-z]+[_\w]* + = 1到无穷大
ma = re.match(r'[_a-zA-z]+[_\w]*','_ht11')
# [1-9]?[0-9] ? = 0到1
ma = re.match(r'[1-9]?[0-9]','87')
^ 匹配字符串开头
$ 匹配字符串结尾
\A/\Z 指定的字符串必须出现在开头/结尾
| 匹配左右任意一个表达式
(ab) 括号中表达式作为一个分组
\<number> 引用编号为num的分组匹配到的字符串
(?P<name>) 分组起一个别名
(?P=name) 引用别名为name的分组匹配字符串
1、search(pattern,string,flags=0)
在一个字符串中查找匹配
2、findall(pattern,string,flags=0)
找到匹配,返回所以匹配部分的列表
3、sub(patten,repl,string,count=0,flags=0)
将字符串中匹配正则表达式部分替换为其他值
使用sub方法后会返回一个新的字符串 原字符串不变
4、split(patten,repl,string,count=0,flags=0)
根据匹配分割字符串,返回分割字符串组成的列表
课程编译环境: python 2.7
简单爬取网页步骤:
1)分析网页元素
2)使用urllib2打开链接
3)读取链接文本
4)使用re匹配出期望文本内容并分条存入list
# 爬取网站图片过程:
import urllib2 # 导入urllib2包
import re
req = urllib2.urlopen('http://www.XXXX.com') # 对网页发出请求
buf = req.read() # 将网页内容读取到buf缓存中
urllist = re.findall(r'http:.+\.jpg',buf) # 获取图片地址列表
i = 0
for url in listurl:
f = open(str(i)+'.jpg', 'w')
req = urllib2.urlopen(url)
buf = req.read()
f.write(buf)
i+=1