试下
拒绝
import 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' #返回被匹配字符串
正则表达式的作用:
使用单个字符串来描述匹配一系列符合其语法规则的字符串
是对字符串操作的一种逻辑公式
处理文本和数据
正则表达式过程:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功、否则匹配失败。
2、
2
11
正则表达式概念
使用单个字符串来描述匹配一系列符合某个语法规则的字符串
是对字符串操作的一种逻辑公式
处理文本和数据
依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功;否则匹配失败
pa=re.compile(r'imooc',re.I)#re.I意为ignore,不区分大小写
#python正则表达式 #1:import re:python 正则表达式模块 #2:第一个正则表达式 [object Object] str1='imooc python' #非正则方法 str1.find('11')#==>-1没找到 str1.find('imooc')#==>0 str1.startswith('imooc')#==>True #正则方法 import re#导入re模块 pa = re.compile(r'imooc')#生成pattern对象,括号中是正则表达式,前加r表示原字符串 type(pa)#==>_sre.SRE_Pattern#生成实例 pa.match(str1)#==><_sre.SRE_Match at 0x7f6e2115f370>返回了一个match的对象地址 ma = pa.match(str1)#使用一个变量接收 ma.span()#查看在原字符串的位置 #查找以下划线开头 import re pa1=re.compile(r'_') ma1=pa1.match('_value') mal.group()
#课程内容
#1:正则表达式基本概念
#2:python正则表达式re模块
#3:正则表达式语法
#4:re模块相关方法使用
#1-1正则简介
#为什么使用正则?
#疑问:字符串匹配就可以实现?
#场景1:在imooc.txt中找到以'imooc'开头的行
def find_start_imooc(f_name):
f=open(f_name)
for line in f:
if line.startswith('imooc'):
print line
#find_start_imooc('imooc.txt')
#场景2:在imooc.txt中找到以'imooc'开头且以'imooc'结尾的行
def find_in_imooc(f_name):
f=open(f_name)
for line in f:
if line.startswith('imooc') and line.endswith('imooc\n'):
#if line.startswith('imooc') and line[:-1].endswith('imooc'):
print line
#abcd = s[0:4] 切片:取字符串s中的第一个字符到第五个字
#python每行以/n结尾,line[:-1]切片去掉最后一个/n
#find_start_imooc('imooc.txt')
#场景3:匹配一个下划线和字母开头的变量名
a='_value1'
a and (a[0]=='_' or 'a'<=a[0]<='z')#True
a='1_value1'
a and (a[0]=='_' or 'a'<=a[0]<='z')#False
#疑问:每一次匹配都要单独完成,能否把它抽象出来做成一个规则?
#正则表达式概念
#1:使用单个字符串来描述匹配一系列符合某个句法规则的字符串
#2:是对字符串操作的一种逻辑公式
#3:应用场景:处理文本和数据
#4:正则表达式过程:依次拿出表达式和文本中的字符比较
#如果每一个字符都能匹配,则匹配成功;否则匹配失败
语法结构清晰
正则表达式 概念
正则表达式
正则表达式语法--分组匹配
正则表达式语法--边界匹配
正则表达式语法--单个字符匹配
*?、+?、??的讲解
\w和\W的讲解部分
正则表达式的基本语法
#*对前一个字符匹配0次或无限次 ma = re.match(r'[A-Z][a-z]', 'Aa') ma.group() ma = re.match(r'[A-Z][a-z]', 'A') ma.group() ma = re.match(r'[A-Z][a-z]*', 'A') ma ma.group() ma = re.match(r'[A-Z][a-z]', 'Adsdshdhhdh') ma.group()
r'<([\w]+>)[\w]+</\1' 小括号中作为一个分组,中间的[\w]+表示匹配一个或多个数字字母 下划线
<\表示HTML中的标签结尾,\1表示再次使用小括号中的匹配内容在匹配一次
ma=re.match(r'[_A-Za-z]+[_\w]*','str')=>用加号进行表达式拼接
*?:非贪婪模式,尽量匹配0次
+?:非贪婪模式,尽量匹配1次
??:非贪婪模式,尽量匹配0次
match = re.compile(r'\[[\w]\]', '[a]')
↑通过转义符保证匹配到:置于中括号内的字符
reg = re.compile(r'xx', re.I) , flag(re.I)的作用是忽略大小写
正则表达式流程:pattern=>re.compile(r'xxx'), match=>pa.match('str')
python自身匹配方法: str.find('xx')/startswith('xx') <=bool
pa.match方法返回Match对象,现实对象内容使用match.group()
其他方法:match.span()匹配对象跨度/string匹配字符串/re表达式实例
Python 3 代码,获取图片不在是src开头,另外图片结尾有jpg和npg。特别是下载重命名时不能都命名为jpg格式。
# get html req = urllib.request.urlopen('https://www.imooc.com/course/list') buf_html = req.read().decode('utf-8') images_tmp = re.findall(r'data-original=.*(?:jpg|png)', buf_html) #get image url list img_urls = [] for ins in images_tmp: t = re.split(r'//', ins) img_urls.append('http://' + t[1]) i = 1 for url in img_urls: fileName = open(str(i) + '.' + re.split(r'\.', url)[-1], 'wb') req1 = urllib.request.urlopen(url) buf_image = req1.read() fileName.write(buf_image) i += 1
正则表达式
'正则表达式语法' # 匹配的字符串也有[]时,需要转义,如r'\[[\w]\]' # 字符匹配 # . 匹配\n除外的任意字符 # [...] 匹配字符集,如[a-zA-Z0-9] # [\d]/[\D] 匹配数字/非数字 # [\s]/[\S] 匹配空白/非空白 # [\w]/[\W] 匹配单词字符[a-zA-Z0-9]/非单词字符 # 多次匹配 # * 匹配前一个字符0次或无限次,如r'[A-Z][a-z]*'可以匹配前面大写后面小写的任意个字符 # + 匹配前一个字符1次或无限次,如r'[_a-zA-Z]+[_\w]'匹配下划线或字母开头的字符,即匹配有效变量 # ? 匹配前一个字符0次或1次,[1-9]?[0-9]匹配有效的两位数 # {m}/{m,n} 匹配前一个字符m次或者n次,如r'[a-zA-Z0-9]{6,10}@163.com'匹配6-10个字符的邮箱帐号,即匹配指定次数的的字符 # *?/+?/?? 匹配模式变为非贪婪,即尽可能少匹配字符,r'[A-Z][a-z]*?只匹配符合的0次 # 边界匹配,强匹配 # ^ 匹配字符串开头如,r'^[\w]{4,10}@163.com$'匹配以任意4-10个有效字符开头,与@163.com结尾的字符 # $ 匹配字符串结尾 # \A/\Z 指定的字符串必须出现在开头或结尾 # 分组匹配 # | 匹配左右任意一个表达式 # (ab) 括号中表达式作为一个分组 # \<number> 引用编号为num的分组匹配到的字符串 # (?P<name>) 分组起一个别名 # (?P=name) 引用别名为name的分组匹配字符串