爬虫之路——DAY2
$的问题
匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。
>>> print re.search('}$', '{block}')
<re.MatchObject instance at 80adfa8>
>>> print re.search('}$', '{block} ')
None
>>> print re.search('}$', '{block}\n')
<re.MatchObject instance at 80adfa8>
关于 match 与 search
match( ) 匹配的是字符串的开始,如果有不在字符串开始但是匹配给定模式的子字符串,用match不能匹配;而search()可以用来匹配在任意地方的子字符串
>>> re.match("c", "abcdef") # No match
>>> re.search("c", "abcdef") # Match
<_sre.SRE_Match object; span=(2, 3), match='c'>
而用 ^ 可以限定search所搜索的地方是字符串的开始处
>>> re.match("c", "abcdef") # No match
>>> re.search("^c", "abcdef") # No match
>>> re.search("^a", "abcdef") # Match
<_sre.SRE_Match object; span=(0, 1), match='a'>
在 MULTILINE 模式中,match( )也只能匹配字符串的最开始,而search()可以匹配每行的匹配字符。
>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No match
>>> re.search('^X', 'A\nB\nX', re.MULTILINE) # Match
<_sre.SRE_Match object; span=(4, 5), match='X'>
再来几个例子
>>> str="2007 log_a\n2008 log_b\n2009 log_c"
>>> m = re.match("^\d.*$") # no match
>>> m = re.match("^\d.*", str) # match 2007 log_a
>>>> m = re.match("^\d.*$", str, re.M) # match 2007 log_a
>>> m = re.search("^\d.*", str) # match 2007 log_a
>>> m = re.search("^\d.*$", str) # no match
>>> m = re.search("^\d.*$", str, re.M) # match 2007 log_a
>>> print(re.findall("^\d.*$", str))
[]
>>> print(re.findall("^\d.*$", str, re.M))
['2007 log_a', '2008 log_b', '2009 log_c']
简单总结一下,#不一定对#
首先,match( )和search( )都只能匹配到一个字符串,即使是在MULTIPLE模式下也只能匹配到一个字符串。区别在于match( )只能匹配字符串的开头处,而search( )可以匹配不用的地方,所以search( )在MULTIPLE模式下会按顺序查找,返回第一个找到匹配的字符串。在需要查找许多匹配的字符串的时候,还是要通过findall( )来查找。同时还需要注意$与re.M的问题,当没有re.M的情况下,$表明为只是简单的整个字符串的末尾,而有re.M的条件下,$表示每一行的结尾。
匹配不包含的字符串
>>> str='<input type="text" id="xxx" name="xxx" value="xxx" />\n<input type="hidden" id="xxx" name="xxx" value="xxx" /> '
>>> m =re.findall("^(?!.*?hidden).*?$", str, re.M)
>>> print(m)
['<input type="text" id="xxx" name="xxx" value="xxx" />']
>>> m =re.findall("^(?!.*?hidden.*?$)", str, re.M)
>>> print(m)
['']
爬虫之路——DAY2相关推荐
- python爬虫之路自学教程_python 爬虫学习之路
2016-6-18 --今天实现了第一个用urllib2实现的爬虫程序. --过程中发现 req = urllib2.Request(url,headers = headers) 总是报错: 主要原因 ...
- Python之网络爬虫(爬虫基本认知、网络爬虫之路)
文章目录 一.爬虫基本认知 二.爬虫之路 初级爬虫工程师 中级爬虫工程师 高级爬虫工程师 一.爬虫基本认知 1.爬虫的简单定义 网络爬虫,又称为网页蜘蛛.蚂蚁.蠕虫.模拟程序,在FOAF社区中,被称为 ...
- 用python爬取基金网信息数据,保存到表格,并做成四种简单可视化。(爬虫之路,永无止境!)
用python爬取基金网信息数据,保存到表格,并做成四种简单可视化.(爬虫之路,永无止境!) 上次 2021-07-07写的用python爬取腾讯招聘网岗位信息保存到表格,并做成简单可视化. 有的人留 ...
- 教你用python实现34行代码爬取东方财富网信息,爬虫之路,永无止境!!
教你用python实现34行代码爬取东方财富网信息,爬虫之路,永无止境!! 代码展示: 开发环境: windows10 python3.6 开发工具: pycharm weddriver 库: sel ...
- Python小白的进阶之路---Day2
Python小白的进阶之路---Day2 1. 列表 1.1 标志 1.2 基本操作 (1)创建列表 (2)向列表添加元素 (3)从列表删除元素 (4)拷贝 1.3列表相关方法 2.元祖 2.1标志 ...
- 如何自学python爬虫-菜鸡的Python爬虫之路(一)如何零基础自学Python
我在这里就假设大家已经有了一定的计算机编程基础,具有一定的编程思想(如果没有的话我会在另写一篇文章关于如何入门编程) 说起来尴尬,其实我是没有资格"教"的,我天赋不行,脑子也比较笨 ...
- python 运维自动化之路 Day2
学习内容: 1.模块初识 2.Pyc是什么 3.Python数据类型 4.数据运算 5.bytes数据类型 6.列表和元组的使用 7.字符串常用操作 8.字典的使用 1.模块初识 如果用 python ...
- python爬虫之路scrapy
python里面的yield怎么用? yield from是什么意思? scrpay The best way to learn is with examples, and Scrapy is no ...
- 一个咸鱼的python_一个咸鱼的Python爬虫之路(三):爬取网页图片
学完Requests库与Beautifulsoup库我们今天来实战一波,爬取网页图片.依照现在所学只能爬取图片在html页面的而不能爬取由JavaScript生成的图. 所以我找了这个网站 http: ...
- python requests库详解_python爬虫之路(一)-----requests库详解
requests库 requests库是python实现的最简单易用的http库. requests库的功能详解. 我们可以自然而然地想到这些方法其实就是http协议对资源的操作. 调用request ...
最新文章
- KEIL5.11安装小结
- 关于error:Cannot assign to 'self' outside of a method in the init family
- 16.实现多个具有相同方法的接口和父类与实现接口有相同方法
- 数据库的语言——SQL
- 2006年4月全国计算机等级考试二级Java语言程序设计
- leetcode - 141. 环形链表(哈希表)
- 修而未复:说说WebLogic那修不完的Java反序列化漏洞
- Fedora上配置一个安全FTP
- Datawhale 零基础入门CV赛事-Task3 字符识别模型
- table表框去掉相邻的间隔
- atitit.验证码识别step2------剪贴板ClipBoard copy image图像 attilax总结
- wordpress各种获取url函数总结
- JSP项目155套-开发专题-大作业设计-毕业设计【建议在校生收藏】(保持更新)
- IOS免越狱安装历史版本APP软件
- python中的iter函数_如何使用python中iter函数?
- 如何搭建OpenOCD环境基于Window10+Cygwin?
- SAE J3016:驾驶自动化分级(2021年4月,中文版)
- 5 种全局 ID 生成方式、优缺点及改进方案
- 新书问答:Software Wasteland
- 鸿蒙三部曲 吞噬星空,我吃西红柿最新作品竟然是它?看来鸿蒙金榜第四名已有归属...