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

     NumPy是一个功能强大的Python库,主要用于对多维数组执行计算.NumPy这个词来源于两个单词-- Numerical和Python.NumPy提供了大量的库函数和操作,可以帮助程序员轻松地 ...

  2. C# this关键字的四种用法

    Go to below URL to find more details and example. http://blog.csdn.net/longlong821/article/details/7 ...

  3. mybatis:SQL拦截器

    打印执行的SQL语句 import java.sql.Connection; import java.text.DateFormat; import java.util.Date; import ja ...

  4. 清晰讲解SQL语句中的内连接,通用于Mysql和Oracle,全是干货哦

    本文章目的:力求清晰明了讲解SQL语句的内连接的各种应用,没有深奥的理解! 前奏:这篇文章和下篇文章会将内连接和外连接讲解清楚SQL语句的多表查询常用的有以下几种:两表联合查询(1)内连接(2)外连接 ...

  5. IE8引用jQuery报$或者jQuery未定义

    最近公司做的项目要求兼容到IE8,结果在页面调试的时候出了个bug,在IE8上面一直报错$未定义,或者jQuery未定义,导致页面上面写的jQuery全部失效,在Chrome浏览器没有任何问题.很是头 ...

  6. javaweb c3p0连接oracle12c

    最近在搞javaweb,在连接池上碰到了一系列的问题,在Junit测试时,oracle12c报错: ORA-28040: 没有匹配的验证协议 百度解决:修改 $ORACLE_HOME/network/ ...

  7. hadoop mkdir: Cannot create directory /usr. Name node is in safe mode.

    今天在hdfs上面创建文件夹的时候报了:org.apache.hadoop.dfs.SafeModeException: Cannot delete /user/hadoop/input. Name ...

  8. 非递归并查集——zoj4109

    卡常卡的我难受 非递归并查集好像写起来常数小一点 int F[maxn]; int Find(int x){ int r = x; while (F[r] != r)r = F[r]; int i = ...

  9. sql--迁移条件数据和补全数值的一个流程

    目的:我要把老顾客的部分数据迁移到另一个表里面 -- 步骤一:筛选查询-- 打开表,只显示想要看到的数据列-- 做条件筛选,筛选出想要的数据 -- 步骤二:sql查询 SELECT ID,Name,G ...

  10. eclipse乱码解决

    设置utf-8 1.点击window>preferences>content types 2.点击右侧Text 3.点击Java Source File 4.下面输入UTF-8 5.点击u ...