爬虫python在什么操作系统_[Python3网络爬虫开发实战] 3.3

好,以上就是我学习python 网络爬虫中重要的一节正则表达式,可能不是很全面,甚至还有点小问题,更多的可以去菜鸟教程等各大知名资料网查询。 一、 正则表达式基础 1.1.概念介绍 正则表达式是用于处理字符串的强大工具,它并不是python的一部分。技巧源码第1类 方案源码内容1 设计模式与架构选择方案内容2 页面设计方案内容3 操作技术方案……第2类 技巧源码内容7 web页面设计内容8 html客户端控件与服务器控件内容9 内置对象内容10 图形图像技术……第2部分 入门训练源码第3类 初探c#及其开发环境第4类 c#程序设计基础第5类 程序流程控制第6类 字符及字符串的使用第7类 数组与集合……第3部分 范例实战源码第22类 初级开发内容72 窗体及菜单设计内容73 控件开发与应用……第23类 中级开发内容77 及linq技术内容78 报表打印技术……第24类 高级应用内容80 网络开发应用内容81 程序安全控制内容82 硬件开发技术……第4部分 入门训练第25类 入门训练内容84 初识c#及其开发环境内容85 开始c#之旅内容86 变量与常量内容87 表达式与运算符…… 第26类 进阶训练内容93 面向对象技术高级应用内容94 异常处理内容95 windows窗体……第27类 中级训练……第5部分 综合源码第28类 编程宝典内容111 掌握c#语言基础之数据类型与变量内容112 领略运算符和表达式带给我们的神奇内容113 峰回路转——巧用流程控制语句内容114 程序开发的灵魂——算法内容115 看似简单的字符串真就那么简单吗……第29类 综合学习源码1内容133 c#语言基础内容134 c#语句控制内容135 数组内容136 面向对象编程内容137 winforms窗体介绍……第30类 综合综合源码2……常规面试测试c# 编程基础能力测试第1堂课 初探c#及其开发环境第2堂课 c#程序设计基础第3堂课 程序流程控制第4堂课 字符及字符串的使用……数学及逻辑思维能力测试 基本测试进阶测试高级测试编程英语能力测试英语基础能力测试英语进阶能力测试。

Python 崔庆才 2018-01-27 14:32 32714浏览

preg_quote()需要参数str并向其中 每个正则表达式语法中的字符前增加一个反斜线. 这通常用于你有一些运行时字符串 需要作为正则表达式进行匹配的时候.。正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符 用于分隔供选择的字符.例如: /abcdef/ 匹配的是字符串 "ab",或者是。当offset=2时,正则表达式为:(^.{2}) .表示除\n之外的任意字符,后面加{2} 就是匹配以数字或字母组成的前两个连续字符,加()就会将匹配到的结果提取出来,然后通过replace将匹配到的结果替换为新的字符串,形如:结果=结果+str。

当然,对于爬虫来说,有了它,从HTML里提取想要的信息就非常方便了。

说了这么多,可能我们对它到底是个什么还是比较模糊,下面就用几个实例来看一下正则表达式的用法。

正则表达式提取器可以用于对页面任何文本的提取,提取的内容是根据正则表达式在页面内容中进行文本匹配。《正则表达式替换工具》,是一个匹配正则表达式的文本替换工具,采用一个正则表达式匹配,直接替换文本中的内容。正是我们所看到的,grep命令的基本用法是比较容易掌握的.现在我们要来看一下基本的正则表达式,这会允许我们做一些更为复杂的匹配.正如我们在前面所提到的,正则表达式是用在linux或是共他的一些开源中的语言.我们可以在vi或是在编写perl脚本时使用.。

这段字符串中包含了一个电话号码和一个电子邮件,接下来就尝试用正则表达式提取出来,如图3-10所示。

图3-10 运行页面

在网页右侧选择“匹配Email地址”,就可以看到下方出现了文本中的E-mail。如果选择“匹配网址URL”,就可以看到下方出现了文本中的URL。是不是非常神奇?

其实,这里就是用了正则表达式匹配,也就是用一定的规则将特定的文本提取出来。比如,电子邮件开头是一段字符串,然后是一个@符号,最后是某个域名,这是有特定的组成格式的。另外,对于URL,开头是协议类型,然后是冒号加双斜线,最后是域名加路径。

对于URL来说,可以用下面的正则表达式匹配:

用这个正则表达式去匹配一个字符串,如果这个字符串中包含类似URL的文本,那就会被提取出来。

正则表达式的语法还包括指定选择项,对子表达式分组和引用前一子表达式的特殊字符.字符 用于分隔供选择的字符.例如: /abcdef/ 匹配的是字符串 "ab",或者是。,好麻烦,正则表达式还提供了范围类,我们可以使用 x-y来连接两个字符表示从x到y的任意字符,这是个闭区间,也就是说包含x和ybenshen,这样匹配小写字母就很简单了。一个字符组只能匹配目标文本中的单个字符,而每个多选结构自身可能是完整的正则表达式,都可以匹配任意长度的文本。

2)、raw字符串的使用:如果要匹配一个.,*这种元字符,就需要加'\'进行转义,即要表示一个'\',正则表达式需要多加一个转义,写成'\\',但是python字符串又需要对其转义,最终变成re.compile('\\\\'),这样就不易理解且很乱,使用raw字符串让正则表达式变得易读,即写成re.compile(r'\\'),另一个方法就是将字符放到字符集中,即[\],效果相同。当offset=2时,正则表达式为:(^.{2}) .表示除\n之外的任意字符,后面加{2} 就是匹配以数字或字母组成的前两个连续字符,加()就会将匹配到的结果提取出来,然后通过replace将匹配到的结果替换为新的字符串,形如:结果=结果+str。我们已经看到了,一个正则表达式中的许多元素才能够匹配字符串的一个字符.例如: \s 匹配的只是一个空白符.还有一些正则表达式的元素匹配的是字符之间宽度为。

上面我们说了几个匹配规则,表3-2列出了常用的匹配规则。

表3-2 常用的匹配规则

模式

描述

匹配字母、数字及下划线

匹配不是字母、数字及下划线的字符

匹配任意空白字符,等价于[\t\n\r\f]

匹配任意非空字符

匹配任意数字,等价于[0-9]

匹配任意非数字的字符

匹配字符串开头

匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串

匹配字符串结尾,如果存在换行,同时还会匹配换行符

匹配最后匹配完成的位置

匹配一个换行符

匹配一个制表符

匹配一行字符串的开头

匹配一行字符串的结尾

匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符

用来表示一组字符,单独列出,比如[amk]匹配a、m或k

不在[]中的字符,比如[^abc]匹配除了a、b、c之外的字符

匹配0个或多个表达式

匹配1个或多个表达式

匹配0个或1个前面的正则表达式定义的片段,非贪婪方式

精确匹配n个前面的表达式

匹配n到m次由前面正则表达式定义的片段正则表达式使用实例,贪婪方式

匹配括号内的表达式,也表示一个组

看完了之后,可能有点晕晕的吧,不过不用担心,后面我们会详细讲解一些常见规则的用法。

其实正则表达式不是Python独有的,它也可以用在其他编程语言中。但是Python的re库提供了整个正则表达式的实现,利用这个库,可以在Python中使用正则表达式。在Python中写正则表达式几乎都用这个库,下面就来了解它的一些常用方法。

这里首先介绍第一个常用的匹配方法——match(),向它传入要匹配的字符串以及正则表达式,就可以检测这个正则表达式是否匹配字符串。

match()方法会尝试从字符串的起始位置匹配正则表达式,如果匹配,就返回匹配成功的结果;如果不匹配,就返回None。示例如下:

运行结果如下:

这里首先声明了一个字符串,其中包含英文字母、空白字符、数字等。接下来,我们写一个正则表达式:

^\s+ 表示以空格开头的连续空白字符,\s+$ 表示以空格结尾的连续空白字符,加上() 就是将匹配到的结果提取出来,由于是 | 的关系,因此这个表达式最多会match到两个结果集,然后执行两次替换:。上面的匹配伊拉克字符串会失败,因为q后面没有字符,而`[^u]`必须匹配一个字符,无论是空格、换行符或者其他单词,都必须至少有一个。比如我们要匹配以字母"a"开头字母"b"结尾的字符串,但是需要匹配的字符串在"a"后面含有很多个"b",比如"a bbbbbbbbbbbbbbbbb",那正则表达式是会匹配第一个"b"还是最后一个"b"呢。

而在match()方法中,第一个参数传入了正则表达式,第二个参数传入了要匹配的字符串。

打印输出结果,可以看到结果是SRE_Match对象,这证明成功匹配。该对象有两个方法:group()方法可以输出匹配到的内容,结果是Hello 123 4567 World_This,这恰好是正则表达式规则所匹配的内容;span()方法可以输出匹配的范围,结果是(0, 25),这就是匹配到的结果字符串在原字符串中的位置范围。

通过上面的例子,我们基本了解了如何在Python中使用正则表达式来匹配一段文字。

刚才我们用match()方法可以得到匹配到的字符串内容,但是如果想从字符串中提取一部分内容,该怎么办呢?就像最前面的实例一样,从一段文本中提取出邮件或电话号码等内容。

允许在一个查找串包含最多9个子表达式,它们的匹配内容可以分别用“\1”,“\2”...“\9”来加以引用。提取该字符串中以索引ifirst位置开始的ncount个字符组成的子字符串,并返回一个包含这个子字符串的拷贝的cstring对象。整个条件表达式可以被当作一个单独的字符串参数也可以被当作空格分割的多个参数传入tcpdump, 后者更方便些. 通常, 如果表达式中包含元字符(nt: 如正则表达式中的'*', '.'以及shell中的'('等字符), 最好还是使用单独字符串的方式传入. 这时,整个表达式需要被单引号括起来. 多参数的传入方式中, 所有参数最终还是被空格串联在一起, 作为一个字符串被解析.。

content='Hello 1234567 World_This is a Regex Demo'

这里我们想把字符串中的1234567提取出来,此时可以将数字部分的正则表达式用()括起来,然后调用了group(1)获取匹配结果。

运行结果如下:

可以看到,我们成功得到了1234567。这里用的是group(1),它与group()有所不同,后者会输出完整的匹配结果,而前者会输出第一个被()包围的匹配结果。假如正则表达式后面还有()包括的内容,那么可以依次用group(2)、group(3)等来获取。

\w匹配任意非单词字符、\s匹配任意的空白字符,如空格、制表符、换行等。表达式a\{-3,}匹配三个或是更多个a,并且尽可以少地的进行匹配.而表达式a\{-,5}可以匹配0到五个字符.表达式a\{-}可以匹配0到无穷大个字符.在通常情况下这个表达式匹配0个符,除非在他的后面还有字符或是表达式.例如[a-z]\{-}x将会匹配.cxcx中的cx.而表达式[a-z]*x将会匹配整个cxcx.最后表达式a\{-5}将会精确的匹配5个字符.。还有一些特殊的字符可以来匹配一定范围的字符.如\a匹配一个字符,而\d匹配任何数字.所以表达式\a\a\a可以匹配任意三个字符.例如下面的命令可以查找任意四个数字:。

接着上面的例子,我们可以改写一下正则表达式:

content='Hello 123 4567 World_This is a Regex Demo'

这里我们将中间部分直接省略,全部用.*来代替,最后加一个结尾字符串就好了。运行结果如下:

可以看到,group()方法输出了匹配的全部字符串,也就是说我们写的正则表达式匹配到了目标字符串的全部内容;span()方法输出(0, 41),这是整个字符串的长度。

因此,我们可以使用.*简化正则表达式的书写。

使用上面的通用匹配.*时,可能有时候匹配到的并不是我们想要的结果。看下面的例子:

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-117770-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值