Python 学习笔记之:正则表达式

一、正则表达式的概念

1.使用单个字符串来描述匹配一系列符合某个句法规则的字符串;

2.是对字符串操作的一种逻辑公式;

3.其应用场景为处理文本和数据;

4.正则表达式的执行过程:依次拿出表达式和文本中的字符串比较,如果每个字符都能匹配成功,则匹配成功;否则匹配失败。


二、re模块

1.编写第一个正则表达式:

(1)import re  #导入正则表达式模块

(2)正则表达式执行 过程及关键函数(涉及两个对象:规则对象、匹配对象)

           使用compile函数创建正则表达式对象

           使用match或search等简单方法实现匹配和搜索

           检查匹配结果

(3)示例:

import re
pattern = re.compile(r'^q')  #是否以q开头,r表示为原生字符串
result = pattern.match('qazxs')   #如果没有匹配成功,则会返回空
result.group()  #匹配结果放在元组中
print result.string

三、语法

1.匹配字符

                 字符                               作用

(1)字符匹配

                   .                                    匹配任意字符

                [……]                              中括号中任选一个,可写为[123456]  或[1-6]含义相同

               \d  /  \D                            匹配数字   /     非数字

              \w  /  \W                            匹配字母数字   /    匹配除过字母数字的内容

              \s   /   \S                            匹配空格          /     匹配除空格外的其他字符

(2)次数匹配

                  *                                    匹配前一个字符0次或多次

                  +                                   匹配前一个字符1次或多次

                 ?                                  匹配前一个字符0次或1次

              {m}  /   {m,n}                   匹配前一个字符m次,或[m,n] 次(少于匹配次数匹配失败;多余匹配字数,则只匹配限定个字符)

            *?   /   +?    /   ??             匹配模式变为非贪婪模式(尽可能少匹配字符)(只要前面匹配上,则后面能不匹配就不匹配)

(3)边界匹配

                ^                                     匹配字符串开头

                $                                    匹配字符串结尾

         \A      /     \Z                           指定的字符串必须出现在开头/结尾

                |                                      匹配左右任意一个表达式

            (ab)                              括号中表达式作为一个分组

      \<number>                            引用编号为number的分组匹配到的字符串

    (?\P<number>)                      为分组起一个别名

       (?P=name)                          引用别名为name的分组匹配的字符串

#(?p<name>)与(?p=name)示例

import re
ma = re.match(r'<([\w]+>)[\w]+</\1',"<book>python</book>")
ma.group()   #输出存入分组的结果

ma = re.match(r'<(?P<bookname>[\w]+>)[\w]+</(?P=bookname)',"<book>python</book>")
ma.group()

四、re模块相关方法使用

1.search(pattern,str,flags)    #用于查找模式串在str中第一次出现的位置

#匹配字符串中一部分数据 str1 = 'videonum = 1000' ma = re.search(r'\d+',str1) ma.group() # 输出:1000



2.findall(pattern,str,flags)     # 找到匹配返回所有匹配的列表   

str1 = "c++=100,java=99,python=80" ma = re.findall(r'[\d]+',str1) ma #['100', '99', '80']




3. sub(pattern,repl,string,count=0,flags=0)    #将字符串中匹配正则表达式的部分替换为其他值

4.split(pattern,string,maxsplit=0,flags=0)       #根据匹配分割字符串,返回分割字符串组成的列表

五、re模块相关练习(抓取网页中的图片到本地)

1.抓取网页地址

import urllib2 req = urllib2.urlopen("http://www.imooc.com/course/list") buf = req.read()

2.获取图片地址

import re listurl = re.findall(r'http:.+\.jpg',buf)




3.抓取图片内容保存到本地   

i = 0 for url in listurl: f = open(str(i)+'.jpg','w') req = urllib2.urlopen(url) buf = req.read() f.write(buf) i+=1











  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值