昨天学到了正则表达式基础知识 :原子
今天开始学习第二个基础知识:元字符
元字符
    就是正则表达式中含有特殊含义的一些字符
常见的元字符及含义
 
符号
含义
.
匹配除换行符以外 的任意字符
^
匹配字符串的开始位置
$
匹配字符串的结束位置
*
匹配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. HDOJ 6508 Problem I. Spell Boost (01背包/DP)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=6508 题目: Problem Description Shadowverse is a funny car ...

  2. 题解 P5301 【[GXOI/GZOI2019]宝牌一大堆】

    这道题除了非常恶心以外也没有什么非常让人恶心的地方 当然一定要说有的话还是有的,就是这题和咱 ZJOI 的 mahjong 真的是好像的说~ 于是就想说这道题出题人应该被 锕 掉 noteskey 整 ...

  3. 自动备份远程mongodb数据库并拉取到本地

    自动备份远程mongodb数据库并拉取到本地 目标: 远程服务器 .1中的mongodb数据拉回公司测试服务器中 .远程服务器中编写自动备份mongodb脚本 ①编写脚本 # vim /opt/bac ...

  4. python课程分享2-伊嬛

    2.4  模块 2.4.1  模块的概念 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,使用者可以把很多函数分组,分别放到不同 ...

  5. 1、js的基本对象和垃圾回收

    js常用的基本类型:Undefined,null,string,number,boolen 还有一种复杂的数据类型 object.判断类型可以用 typeof. 确定值是否是有穷的,isFinite, ...

  6. C#多条件查出来的多个DataSet,然后循环将数据整合

    private List<string> barList;        public List<string> BarList        {            get ...

  7. .net core ef 通过dbfirst方式连接sql server数据库

    1. 创建基于.net core 的项目(过程略) 2. 使用nuget添加引用 Microsoft.EntityFrameworkCore Microsoft.EntityFrameworkCore ...

  8. 2018年冬季寒假作业4--PTA 抓老鼠啊~亏了还是赚了?

    1. 实验代码; #include<stdio.h> ; void search(char a,int *p){ if(a=='X'){ ) *p=; ; printf("U&q ...

  9. Centos 部署.net Core

    1.安装net core框架 sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc sudo sh -c 'echo ...

  10. MyCat全局表和ER--笔记(三)

    全局表 全局表的作用 在分片的情况下,当业务表因为规模而进行分片以后,业务表与这些附属的字典表之间的关联,就成了比较棘手的问题,考虑到字典表具有以下几个特性: 变动不频繁 数据量总体变化不大 数据规模 ...