python正则表达式使用实例_正则表达式的基础知识,以及Python爬虫中的使用方法...
一、正则表达式
实际上爬虫一共就四个主要步骤:
- 明确目标(要知道你准备在哪个范围或者网站去搜索)
- 爬(将所有的网站内容全部爬下来)
- 取(去掉对我们没有用处的数据)
- 处理数据
我们在第上一篇文章中介绍的简单的“贴吧小爬虫”实际上省略了第3步,也就是“取”的步骤。因为我们down下了的数据是全部的网页,这些数据是很庞大并且混乱的,大部分的东西使我们不关心的,因此我们需要将之过滤出来。
那么对于文本的过滤或者规则的匹配,这里就有个学问,就是“正则表达式”
说道正则表达式很多人都头疼,确实,这个东西是学习精通并且应用熟练实属于一件蛋疼的事。
但是作为一个工程师,要有一种思维,就是用到学到。用到3分要学4分,如果要用到7分,我们就要学到8分。
1.正则表达式基础
正则表达式是用于处理字符串的强大工具,并不是属于某种编程语言。
正则表达式拥有独立的处理引擎,不管是什么编程语言,正则表达式的语法都是一样的。
2.正则表达式匹配过程
- 一次拿出表达式和文本中的字符比较
- 如果每一个字符都能匹配,则匹配成功;一旦匹配不成功的字符则匹配失败
- 如果表达式中有量词或边界,这个过程会稍微有一些不同
3.数量词的贪婪模式与非贪婪模式
正则表达式通常用于文本中的查找匹配的字符串
贪婪模式,总是尝试匹配尽可能多的字符;
非贪婪模式则相反,总是尝试匹配尽可能少的字符
(Python里的数量词默认是贪婪的)
- 例如:
正则表达式"ab*"如果用于查找"abbbc",将找到“abbb”。
而如果使用非贪婪的数量词“ab*?",将找到"a"
4.Python中如何使用正则表达式
Python中是通过一个叫“re”的包来支持正则表达式。
当然具体的“re”中的方法,可以在Python的命令行中
localhost:spider ldb$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more informati
on.
>>> import re
>>> help(re)
进行查看。
这里面我们知识做一个简单的正则匹配。
首先可以创建一个re_test.py文件
# -*- coding: utf-8 -*-#引入正则表达式re模块
import re#re
模块提供一个方法叫compile模块,提供我们输入一个匹配的规则
#然后返回一个pattern实例,供我们根据这个规则去匹配一些我们自定义的字符串
pattern = re.compile(r'd+.d*')result = pattern.findall("3.14158912312, 3.123123213, 232312, 3.15")
#findall 将返回全部匹配到的字符串列表给result
for item in result:print item
我们来详细的分析一下上面的代码,首先:
# -*- coding: utf-8 -*-
表示当前的Python文件的编码格式是"utf-8"
import re
re模块提供一个方法叫compile模块,提供我们输入一个匹配的规则
然后返回一个pattern实例,供我们根据这个规则去匹配一些我们自定义的字符串
pattern = re.compile(r'd+.d*)
这里我们传递的是'd+.*'表达式
- d 表示数字[0-9]
- + 表示重复出现上一次匹配的1次或n次
- . 表示字符’.’
- * 表示重复出现上一次匹配的0次或n次r 实际上是python告诉编译器这个字符串中的全部转义字符失效,按照原始字符串处理。
所以d+.d*实际上是表示匹配小树的规则
能够匹配到123.12312,1321.1等小数
但是匹配不到666,abc等非小数的字符串
由于我们已经简历好了一个能够匹配‘⧵d+.⧵d*’规则的partten对象。
通过partten的findall方法就能够匹配到我们得到的字符串。
返回的是一个匹配到字符串的列表 []
所以运行结果如下:
localhost:spider ldb$ python re_test.py
3.14158912312
3.123123213
3.15
findall(“3.14158912312, 3.123123213, 232312 , 3.15”)中的 232312 没有匹配
python正则表达式使用实例_正则表达式的基础知识,以及Python爬虫中的使用方法...相关推荐
- python交互界面实例_什么是“面向对象”程序设计-以Python为例
面向对象的概念 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理 ...
- python交互界面实例_什么是“面向对象”程序设计以Python为例
面向对象的概念 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理 ...
- java类的定义的实例_《Java基础知识》Java类的定义及其实例化
类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public classDog { String name;intage;void ...
- python语言正确的标识符是__python基础知识:python的标识符和关键字
本文适合编程语言零基础的初学者,有打算转行学习python的可以添加关注,后续小编将会把自己转行学pyhton语言以来的所有笔记,和工作中总结的一些开发经验分享给大家. 标识符 什么是标识符: 开发人 ...
- 零基础python入门书籍推荐书目_清华大学出版社-图书详情-《Python数据科学零基础一本通》...
序 多次与教育界的朋友相聚,谈到计算机语言的发展趋势时,大家一致认为 Python 是 当今最重要的计算机语言.许多知名公司,例如 Google.Facebook 等皆已将 Python 列 为必备计 ...
- python程序如何执行死刑_「Python基础知识」Python生成器函数
原标题:「Python基础知识」Python生成器函数 对于程序而言,内存也是很重要的,因为程序中很多数据都是保存在内存中的,如果内存中存储的数据过多,那么系统就会崩溃,这是人们不希望发生的. 可以采 ...
- Python基础笔记_Day01_计算机基础知识和Python开发环境搭建
Day01_计算机基础知识和Python开发环境搭建 目录 01.01_计算机基础知识(计算机概述)(了解) 01.02_计算机基础知识(软件开发和计算机语言概述)(了解) 01.03_计算机基础知识 ...
- 视频教程-快速入门Python基础教程_Python基础知识大全-Python
快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...
- CV:计算机视觉技术之图像基础知识—以python的cv2库来了解计算机视觉图像基础
CV:计算机视觉技术之图像基础知识-以python的cv2库来了解计算机视觉图像基础 目录 一.图像中的傅里叶变换 1.时域和频域 2.傅里叶变换 3.图像中的傅里叶变换
最新文章
- 区块链共识算法:PoS即权益证明 DPoS委托授权的权益证明
- 他给女朋友做了个树莓派复古相机,算法代码可自己编写,成本不到700元丨开源...
- influxdb java spring_Spring boot使用influxDB总结
- 手机扫一扫,现实物体隔空「复制粘贴」进电脑!北大校友的AI新研究,现在变成AR酷炫应用...
- Python中经典类和新式类的区别
- 【已解决】tomcat报严重: Socket accept failed
- 帆软报表(finereport)使用Event 事件对象 (target)修改提示框样式
- [mybatis]映射文件_select_resultMap_关联查询
- 字符数组,字符串、数字转化
- 反汇编基础-数组和指针的反汇编代码分析
- firebase使用_如何开始使用Firebase Hosting
- 推荐JS插件:imagesLoaded,监测图片加载情况并提供相应的事件(加载成功/失败)...
- zabbix的boot.log占满根目录不能ssh连接No space left on device
- Hokuyo‘s first try
- qlabel显示图片同时鼠标点击画线_怎样将CAJ文档转成JPG图片?
- 常见反爬虫策略 及应对措施
- 求素数 java 101 200_Java求101~200之间的素数
- UVALive 4490 Help Bubu
- Gephi启动错误:Cannot load even default layout, using internally predefined
- ZFM_RFC_FIDOC-创建财务凭证-BAPI_ACC_DOCUMENT_CHECK/BAPI_ACC_DOCUMENT_POST/POSTING_INTERFACE_DOCUMENT
热门文章
- Linux Signals 进程信号简介
- hadoop中datanode无法启动,报Caused by: java.net.NoRouteToHostException: No route to host
- 【算法学习笔记】83.排序辅助 动态规划 SJTU OJ 1282 修路
- 代码艺术~优雅的编程字体及对字体的感觉
- go数组详解:数组的定义、遍历、使用细节、二维数组的定义及其遍历
- go gin gorm获取harbor项目,镜像,tag代码示例
- vue npm run serve/dev命令后台运行:nohup npm run serve >web.log 2>1 exit
- 【网址收藏】hexo博客主题收藏
- kafka生产者、消费者消息操作命令
- Ansible 介绍和架构、特性