昨天学到了正则表达式基础知识 :原子
今天开始学习第二个基础知识:元字符
元字符
    就是正则表达式中含有特殊含义的一些字符
常见的元字符及含义
 
符号
含义
.
匹配除换行符以外 的任意字符
^
匹配字符串的开始位置
$
匹配字符串的结束位置
*
匹配0次,1次,或多次前面的原子
?
匹配0次或一次前面的原子
+
匹配一次或多次前面的原子
{n}
前面的原子恰好出现n次
{n,}
前面的原子至少出现n次
{n,m}
前面的原子至少出现n次,至多出现m次
|
模式选择符
()
模式单元符
具体的说,元字符分为:
 
(1)任意匹配元字符(2)边界限制元字符(3)限定符(4)模式选择符(5)模式单元符
下面用程序来观察使用方法
import re
string1="abcdfphp345pythony_py"#我们分别让string1与下面的pattern进行匹配
pattern1=".python..."#.是匹配除了换行符以外的字符
pattern2="^abd"
pattern3="^abc"
pattern4="py$"
pattern5="ay$"
pattern6="py.*n"
pattern7="cd{2}"
pattern8="cd{3,}"
pattern9="python|php"#可以把|当成‘或’理解
pattern10="(cd){1,}"#小括号里会被当成一个整体使用,这里的意思是cd会至少出现一次
pattern11="cd{1,}"#这里就是d会至少出现一次
print(re.search(pattern1,string1))
print(re.search(pattern2,string1))
print(re.search(pattern3,string1))
print(re.search(pattern4,string1))
print(re.search(pattern5,string1))
print(re.search(pattern6,string1))
print(re.search(pattern7,string1))
print(re.search(pattern8,string1))
print(re.search(pattern9,string1))
print(re.search(pattern10,string1))
print(re.search(pattern11,string1))
 
#结果:
 
#<_sre.SRE_Match object; span=(10, 20), match='5pythony_p'>
#None
#<_sre.SRE_Match object; span=(0, 3), match='abc'>
#<_sre.SRE_Match object; span=(19, 21), match='py'>
#None
#<_sre.SRE_Match object; span=(11, 17), match='python'>
#None
#None
#<_sre.SRE_Match object; span=(5, 8), match='php'>
#<_sre.SRE_Match object; span=(2, 4), match='cd'>
#<_sre.SRE_Match object; span=(2, 4), match='cd'>
 
 
 
 
模式修正
    模式修正符就是在不改变正则表达式的情况下通过模式修正符改变正则表达式的含义
常见如下
 
符号
含义
I
匹配时忽略大小写
M
多行匹配
L
做本地化识别
U
根据Unicode字符及解析字符
S
让.匹配包括换行符,使用后.就可以匹配任意字符了
通过re.search(pattern1,string,re.I)修改即可
 
贪婪模式与懒惰模式
贪婪模式核心就是尽可能多的匹配,懒惰模式就是尽可能少的匹配。
pattern1="p.*y"#贪婪模式
pattern2="p.*?y"#懒惰模式,采用的就是就近匹配原则
print(re.search(pattern1,string1))
print(re.search(pattern2,string1))
#结果
#<_sre.SRE_Match object; span=(5, 21), match='php345pythony_py'>
#<_sre.SRE_Match object; span=(5, 13), match='php345py'>
 
如果我们想在字符间匹配任意字符,如“p.*y”默认是懒惰模式,通常在对应的.*后面加上?就可以从贪婪模式转为懒惰模式
        
正则表达式常见函数
    直接用代码理解
import re
string="dpythonhbaigdukpythonabvjsvawegadbkvj"
pattern =".python."
 
print(re.match(pattern,string))
#会从string起始位置(开头)开始匹配,不满足返回None,满足则返回匹配结果
#后面的不会匹配到
print(re.match(pattern,string).span())#会输出匹配结果在源字符串的位置
print(re.search(pattern,string))#会查找整个字符串得到匹配结果
 
上述每次只能匹配一个内容
如何将符合模式的内容全部匹配出来?
1:使用re.compile()对正则表达式进行预编译。
2:编译后,使用findall()根据正则表达式从源字符中将匹配内容全部找出
#pattern1=re.compile(".python.")
#print(pattern1.findall(string))
print(re.compile(pattern).findall(string))
如果想替换字符串可以使用re.sub()方法
格式:re.sub(pattern 正则表达式,rep要替换的字符,string源字符串,max最多替换次数)
re.sub(pattern."php",string,2)
 
常用实例
 
    匹配.com或.cn的后缀URL
 
pattern="[a-zA-Z]+://[^\s]*[.com|.cn]"
string="<a href='http://www.baidu.com'>百度首页</a>"
result=re.search(pattern,string)
print(result)
匹配电话号码:
patternphone="\d{4}-\d{7}|\d{3}-\d{8}"
匹配电子邮件
patternemail="\w+([.+-]\w+)*@\w+([.-]\w+)*\.\w+([.-]\w+)*"
 
正则就到这,明天开始学习cookie相关知识
 
 
 
 
 此文是我在学习《精通Python网络爬虫》(韦玮著)的总结,纯手打。
 

python爬虫第四天的更多相关文章

  1. Python爬虫实战四之抓取淘宝MM照片

    原文:Python爬虫实战四之抓取淘宝MM照片其实还有好多,大家可以看 Python爬虫学习系列教程 福利啊福利,本次为大家带来的项目是抓取淘宝MM照片并保存起来,大家有没有很激动呢? 本篇目标 1. ...

  2. Python爬虫进阶四之PySpider的用法

    审时度势 PySpider 是一个我个人认为非常方便并且功能强大的爬虫框架,支持多线程爬取.JS动态解析,提供了可操作界面.出错重试.定时爬取等等的功能,使用非常人性化. 本篇内容通过跟我做一个好玩的 ...

  3. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  4. 转 Python爬虫入门四之Urllib库的高级用法

    静觅 » Python爬虫入门四之Urllib库的高级用法 1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我 ...

  5. python爬虫入门四:BeautifulSoup库(转)

    正则表达式可以从html代码中提取我们想要的数据信息,它比较繁琐复杂,编写的时候效率不高,但我们又最好是能够学会使用正则表达式. 我在网络上发现了一篇关于写得很好的教程,如果需要使用正则表达式的话,参 ...

  6. Python爬虫知识点四--scrapy框架

    一.scrapy结构数据 解释: 1.名词解析: o 引擎(Scrapy Engine)o 调度器(Scheduler)o 下载器(Downloader)o 蜘蛛(Spiders)o 项目管 ...

  7. Python爬虫利器四之PhantomJS的用法

    前言 大家有没有发现之前我们写的爬虫都有一个共性,就是只能爬取单纯的html代码,如果页面是JS渲染的该怎么办呢?如果我们单纯去分析一个个后台的请求,手动去摸索JS渲染的到的一些结果,那简直没天理了. ...

  8. Python 爬虫(四):Selenium 框架

    Selenium 是一个用于测试 Web 应用程序的框架,该框架测试直接在浏览器中运行,就像真实用户操作一样.它支持多种平台:Windows.Linux.Mac,支持多种语言:Python.Perl. ...

  9. Python爬虫(十四)_BeautifulSoup4 解析器

    CSS选择器:BeautifulSoup4 和lxml一样,Beautiful Soup也是一个HTML/XML的解析器,主要的功能也是如何解析和提取HTML/XML数据. lxml只会局部遍历,而B ...

随机推荐

  1. java学习笔记05-运算符

    算数运算符 +:相加 -:相减 *:相乘 /:相除 %:取余 ++:自增 --:自减 public static void main(String[] args) { int i = 10; int ...

  2. Java面试题 静态代码块 构造代码块 构造方法 的执行顺序

    JAVA中的静态代码块 构造代码块 构造方法执行顺序: 静态代码块(类加载时执行)>>构造代码块>>构造方法 下面展示一个简单的例子,推荐大家动手运行一遍: public cl ...

  3. hdu2181 简单搜索

    题意: 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每个城市刚好一次后回到出发的城市. Input前20行的第i行有3个数,表示与第i个城市相邻的3个城市.第 ...

  4. 使用 DG Tweening

    在iphone上卡顿的话,使用application.frame更改刷新帧率

  5. Java的慢和稳

    对Java的了解还有待进一步提升,也没有做太多实践工作.只是把脑袋当成电脑,把Java放在里边不停地转,观察它的线路.得到的总体印象加上书本参考,认为Java的应用场景是慢和稳. 学编程语言总会接触到 ...

  6. Java数组的声明和遍历

    Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同. Java 语言中提供的数组是用来存储固定大小的同类型元素. 你可以声明一个数组变量,如 n ...

  7. TLS详解

    TLS加密通信, 开始使用协商的秘钥进行加密通信 1.服务器也可以要求验证客户端,即实现双向的验证, 2.会话缓存握手过程,为了建立握手的速度,减少协议带来的性能方面的降低和资源方面的消耗,TLS协议 ...

  8. 依赖背包——cf855C好题

    比较裸的依赖背包,但是想状态还是想了好久 转移时由于边界问题,虽然可以倒序转移,但当容量为0|1的时候,由于有初始值的存在 很难再原dp数组上进行修改,所以额外用tmp数组来保存修改后的值 #incl ...

  9. UI---设置Activity背景为透明

    1.在values下colors中设置透明颜色 <?xml version="1.0" encoding="utf-8"?> <resourc ...

  10. php Excel 导入功能

    下载excel类地址 https://pan.baidu.com/s/19MqAHUn4RyZ5HEAChyC0jg  密码:mn58 本人用的thinkcmf框架 把类文件放在框架的类文件里面,下面 ...