关于python爬虫经常要用到的一些Re.正则表达式
转载:https://blog.csdn.net/skyeyesxy/article/details/50837984
1.正则表达式的常用符号与方法
常用符号:点号,星号,问号与括号(小括号)
- (.):匹配任意字符,换行符\n除外
- (*):匹配前一个字符0次或无限次
- (?):匹配前一个字符0次或1次
- (.*):贪心算法
- (.*?):非贪心算法
- ( ):括号内的数据作为结果返回
常用方法:re.findall, re.search, re.sub
- findall:匹配所有符合规律的内容,返回包含结果的列表
- search:匹配并提取第一个规律的内容,返回一个正则表达式对象(object)
- sub:替换符合规律的内容,返回替换后的值
2.举例说明
1)findall
a.点号(.)
>>import re
a = 'xz123'
b = re.findall('x.', a)
print(b)
>>输出 ['xz']
############点.
是一个占位符,一个.
代表一个符号
b.星号(*)
>>import re
a = 'xyxy123'
b = re.findall('x*', a)
print b
>>
- 输出
['x', '', 'x', '', '', '', '', '']
############依次匹配字符,有则显示,无则显示''
(空)。
c.问号(?)
>>import re
a = 'xy123'
b = re.findall('x?', a)
print b
- 单独与
*
一样,前面附加其他的符号将做非贪心限制
d.贪心(.*)
import re
secret_code = 'ghkj08hs68xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxxfj4286ykjhag2'
b = re.findall('xx.*xx', secret_code)
print b
- 输出
['xxIxxa14kgj4w314exxlovexxbvk14rgjhxxyouxx']
只要满足条件全部显示,贪心算法
e.非贪心(.*?)
b = re.findall('xx.*?xx', secret_code)
- 输出
['xxIxx', 'xxlovexx', 'xxyouxx']
以上只做了解,一般只用(.*?)
f.经典用法(.*?)
b = re.findall('xx(.*?)xx', secret_code)
- 输出
['I', 'love', 'you']
()
包围所需要的内容,括号内的内容作为结果返回,不需要的内容放在括号外面
2)re.S
import re
secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
#love后有换行符
b = re.findall('xx(.*?)xx', secret_code)
print b
- 输出
['I', 'bvk14rgjh']
,因为.
不能匹配换行符。所以会一行为一个搜索项去找。匹配任何字符除了新的一行
import re secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove xxbvk14rgjhxxyouxxfj4286ykjhag2''' #love后有换行符 b = re.findall('xx(.*?)xx', secret_code, re.S) print b
输出
>>['I', 'love\n', 'you']
,re.S让.
匹配所有行,包括了换行符(以\n
的形式出现
4)sub
import re
s = '123abcssfasdfas123'
output = re.sub('123(.*?)123', '123789123', s)
print output
>>
- 输出
123789123
- sub将符合条件的()内内容提换
6)compile用法
import re
secret_code = '''ghkj08hs68xxIxxa14kgj4w314exxlove
xxbvk14rgjhxxyouxxfj4286ykjhag2'''
pattern = 'xx(.*?)xx'
new_pattern = re.compile(pattern, re.S)
b = re.findall(new_pattern, secret_code)
print b
因为findall自动调用compile方法,所以不先编译规律compile再匹配
7)匹配纯数字(\d+)
import re
a = 'dfhkgh43gfhja873y5t2167715'
b = re.findall('(\d+)', a)
print b
>>
- 输出
['43', '873', '5', '2167715']
关于python爬虫经常要用到的一些Re.正则表达式的更多相关文章
- Python爬虫开发【第1篇】【正则表达式】
非结构化数据:HTML(正则表达式.XPath.CSS选择器) 结构化数据:JSON文件(JSON Path.转化为Python类型进行操作) XML文件(转化成Python类型.XPath.CSS选 ...
- Python 爬虫模拟登陆知乎
在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...
- python爬虫成长之路(一):抓取证券之星的股票数据
获取数据是数据分析中必不可少的一部分,而网络爬虫是是获取数据的一个重要渠道之一.鉴于此,我拾起了Python这把利器,开启了网络爬虫之路. 本篇使用的版本为python3.5,意在抓取证券之星上当天所 ...
- python爬虫学习(7) —— 爬取你的AC代码
上一篇文章中,我们介绍了python爬虫利器--requests,并且拿HDU做了小测试. 这篇文章,我们来爬取一下自己AC的代码. 1 确定ac代码对应的页面 如下图所示,我们一般情况可以通过该顺序 ...
- python爬虫学习(6) —— 神器 Requests
Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...
- 批量下载小说网站上的小说(python爬虫)
随便说点什么 因为在学python,所有自然而然的就掉进了爬虫这个坑里,好吧,主要是因为我觉得爬虫比较酷,才入坑的. 想想看,你可以批量自动的采集互联网上海量的资料数据,是多么令人激动啊! 所以我就被 ...
- python 爬虫(二)
python 爬虫 Advanced HTML Parsing 1. 通过属性查找标签:基本上在每一个网站上都有stylesheets,针对于不同的标签会有不同的css类于之向对应在我们看到的标签可能 ...
- Python 爬虫1——爬虫简述
Python除了可以用来开发Python Web之后,其实还可以用来编写一些爬虫小工具,可能还有人不知道什么是爬虫的. 一.爬虫的定义: 爬虫——网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区 ...
- Python爬虫入门一之综述
大家好哈,最近博主在学习Python,学习期间也遇到一些问题,获得了一些经验,在此将自己的学习系统地整理下来,如果大家有兴趣学习爬虫的话,可以将这些文章作为参考,也欢迎大家一共分享学习经验. Pyth ...
随机推荐
- body里面的onload和window.onload的区别
区别:body里面的onload是在“页面加载完成后执行的动作” window里面的onload是在“页面加载时执行的动作” 例子:在html页面中有一个大图片,想要在图片显示出来后提示一个消息框“图 ...
- Kendo UI ASP.Net MVC 实现多图片及时显示加上传(其中有借鉴别人的代码,自己又精简了一下,如有冒犯,请多原谅!)
View: <div class="demo-section k-content"> @(Html.Kendo().Upload() .Name("files ...
- Java中常见数据结构Map之HashMap
之前很早就在博客中写过HashMap的一些东西: 彻底搞懂HashMap,HashTableConcurrentHashMap关联: http://www.cnblogs.com/wang-meng/ ...
- Ajax模拟Form表单提交,含多种数据上传
---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...
- Clion下jni配置
Clion非常适合写C++程序 首先把C:\Program Files\Java\jdk1.7.0_79\include和C:\Program Files\Java\jdk1.7.0_79\inclu ...
- python 一篇就能理解函数基础
一,函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过 ...
- 【深度学习】用PaddlePaddle进行车牌识别(二)
上节我们讲了第一部分,如何用生成简易的车牌,这节课中我们会用PaddlePaddle来识别生成的车牌. 数据读取 在上一节生成车牌时,我们可以分别生成训练数据和测试数据,方法如下(完整代码在这里): ...
- 【Bootstrap】 一些提示信息插件
前端总是会有很多信息提示的时候,最简单的可以用javascript自带的alert,confirm等.这些虽然和js的配合很好,但是很丑. bootstrap给我们提供了一些不同的方案比如modal的 ...
- Nginx代理转发Apache+svn
1.安装svn和httpd yum install httpd yum install subversion mod_dav_svn 创建仓库目录 mkdir -p /var/www/svn 3.创建 ...
- New UWP Community Toolkit
概述 UWP Community Toolkit 是一个 UWP App 自定义控件.应用服务和帮助方法的集合,能够很大程度的简化和指引开发者的开发工作,相信广大 UWPer 并不陌生. 下面是截取自 ...