昨天学到了正则表达式基础知识 :原子
今天开始学习第二个基础知识:元字符
元字符
    就是正则表达式中含有特殊含义的一些字符
常见的元字符及含义
 
符号
含义
.
匹配除换行符以外 的任意字符
^
匹配字符串的开始位置
$
匹配字符串的结束位置
*
匹配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. 题解-COCI-2015Norma

    Problem SPOJ-NORMA2 & bzoj3745 题意概要:给定一个正整数序列 \(\{a_i\}\),求 \[\sum_{i=1}^n\sum_{j=i}^n(j-i+1)\mi ...

  2. C++中public/protect/private三种访问权限控制

    一.成员访问权限控制 1.public (1)public成员变量可以被成员函数访问  [访问性] (2)public成员可以被实体对象访问  [访问性] (3)public成员可以成为子类成员  [ ...

  3. 关于npm镜像,发布,内网搭建等

    npm config set registry http://registry.npmjs.org npm config set registry https://registry.npm.taoba ...

  4. 解决关于win10下eclipse代码格式化不生效问题

    今日,在写代码的时候遇到在eclipse中ctrl+shift+f格式化代码不生效的问题,原本以为是和热键冲突,所以关闭了搜狗输入法的简体和繁体的切换方式,但是发现,还是没有生效,所以,想到修改ecl ...

  5. PHP客服聊天

    1.基于workman框架 github:https://github.com/walkor/workerman-chat 文档:http://www.workerman.net/gatewaydoc ...

  6. RandomShuffleQueue

    一.几个函数 RandomShuffleQueue类 __init__(self, capacity, min_after_dequeue,dtypes, shapes=None,names=None ...

  7. redis单点、redis主从、redis哨兵sentinel,redis集群cluster配置搭建与使用

    目录 redis单点.redis主从.redis哨兵 sentinel,redis集群cluster配置搭建与使用 1 .redis 安装及配置 1.1 redis 单点 1.1.2 在命令窗口操作r ...

  8. macos 命令行安装 ipa

    macos 命令行安装 ipa 苹果发神经后itunes已经无法在安装app了,如果有知道的兄弟可以告诉我啊 ideviceinstaller 使用这个开源项目可以在macos下安装app brew ...

  9. python 的os.getenv("PATH")和os.environ.get("PATH")的区别

    os.environ(x [,x]) raises an exception if the environmental variable does not exist. os.getenv(x) do ...

  10. Mac Segmentation fault: 11

    同样一份代码,在windows10编译运行都没问题.但在mac上运行报Segmentation fault: 11错误. 原因是有指针被定义但是没有分配空间便传入函数,如 double *x; 因为M ...