学习目的:

  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特点字符、及这些特点字符组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

正式步骤

Step1:常用匹配模式

Step2:最常规的匹配

import re

testString = 'I have 4Learned the python years'
print(len(testString))
result = re.match('^I\s\w{4}\s\d\w{7}.*years$',testString)
print(result)
print(result.group()) #现实匹配结果
print(result.span()  #现实匹配区间

运行结果:

32
<_sre.SRE_Match object; span=(0, 32), match='I have 4Learned the python years'>
I have 4Learned the python years
(0, 32)

范匹配:

.*可以把除了匹配的开头和结尾都匹配

import re
testString = 'I have 4Learned the python years'
print(len(testString))
result = re.match('^I.*years$',testString)
print(result)
print(result.group())
print(result.span())

匹配目标:

  设置起始端点后,用()来把需要匹配的目标括号起来

import re

testString = 'I have Learned the python years'
print(len(testString))
result = re.match('^I\s\w{4}\s(\w+)\s.*years$',testString)
print(result)
print(result.group(1))
print(result.span())

贪婪匹配:

import re
testString = 'I have 7777 Learned the python years'
print(len(testString))
result = re.match('^I.*(\d+).*years$',testString)
print(result)
print(result.group(1))
print(result.span())

运行结果:

36
<_sre.SRE_Match object; span=(0, 36), match='I have 7777 Learned the python years'>
7
(0, 36)

非贪婪匹配

import re
testString = 'I have 7777 Learned the python years'
print(len(testString))
result = re.match('^I.*?(\d+).*years$',testString)
print(result)
print(result.group(1))
print(result.span())

运行结果:

36
<_sre.SRE_Match object; span=(0, 36), match='I have 7777 Learned the python years'>
7777
(0, 36)

Step3:匹配模式

包含换行符:

import re
testString = '''I have 7777
Learned the python years'''
print(len(testString))
result = re.match('^I.*(\d+).*years$',testString,re.S)
print(result)
print(result.group(1))
print(result.span())

转义:

import re
content = "i have $5.00"
result = re.match('i have \$5\.00',content)
print(result.group())

Step4: re.search

  功能:扫描整个字符串,返回第一个成功的匹配

  

import re
testString = '''I have 7777
Learned the python years'''
print(len(testString))
result = re.search('I.*(\d+).*years$',testString,re.S)
print(result)
print(result.group(1))
print(result.span())

  总结:为了匹配方便,能用search就不用match,因为search方法不用限制匹配字符串的头部必须一致

Step5: re.compile

# -*-  coding:utf-8 -*-
"""
re.compile 将一个正则表达式串编译成正则对象,以便于复用该匹配模式--简言之就是代码复用
按我的理解就是下面例子中的pattern就是过滤条件
""" import re content = "I love python"
pattern = re.compile('I.*python',re.S)
result = re.match(pattern,content)
result1 = pattern.match(content)
print(result.group())
print(result1.group())

运行结果:

I love python
I love python

学习总结:


  正则表达式的应用需要多实践,在过滤爬取的数据时,应用较多

Python爬虫学习==>第九章:正则表达式基础的更多相关文章

  1. Python爬虫学习==>第二章:MongoDB环境配置

    学习目的: MongoDB的安装 正式步骤 (VMWare 虚拟机上无法安装这个MongoDB的自启动服务,如果你能办到,请多赐教) Step1:MongoDB的简介 MongoDB是一个基于分布式文 ...

  2. Python爬虫学习==>第一章:Python3+Pip环境配置

    前置操作 软件名:anaconda  版本:Anaconda3-5.0.1-Windows-x86_64清华镜像  下载链接:https://mirrors.tuna.tsinghua.edu.cn/ ...

  3. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  4. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

  5. [转]《Python爬虫学习系列教程》

    <Python爬虫学习系列教程>学习笔记 http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多. ...

  6. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  7. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  8. Python爬虫学习系列教程

    最近想学一下Python爬虫与检索相关的知识,在网上看到这个教程,觉得挺不错的,分享给大家. 来源:http://cuiqingcai.com/1052.html 一.Python入门 1. Pyth ...

  9. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

随机推荐

  1. 《Python基础教程》第五章:条件、循环和其他语句

    在Python中赋值运算和比较运算是可以连接的,运算符可以连在一起使用,如:0<age<100 ==运算符判定两个对象是否相等,is判定两者是否等同(同一个对象) 断言,在错误条件出现时直 ...

  2. layui分页的使用心得

    // 执行页面加载的函数 loadData(1) // 每页条数 var limit = 5; // 渲染页面 function loadData(curr){ $.ajax({ type:" ...

  3. Cannot use JSX unless the '--jsx' flag is provided.

    在tsx文件中加入html代码后,报错 Cannot use JSX unless the '--jsx' flag is provided. 解决方法: 在tsconfig.json中加入: &qu ...

  4. hdu 6039 Gear Up

    题 OvO http://acm.hdu.edu.cn/showproblem.php?pid=6039 (2017 Multi-University Training Contest 1 1007) ...

  5. java上传大文件解决方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...

  6. Word:表格在页面中垂直居中

    本文适用于Word 2007 + Windows 7,熊猫帮帮主@cnblogs 2018/2/22 如何让表格在页面上垂直居中呢.想当然的认为这属于表格的设置,在表格属性和其它表格相关选项中一通猛找 ...

  7. 「美团 CodeM 资格赛」试题泛做

    LibreOJ真是吼啊! 数码 推个式子,把枚举因数转为枚举倍数.然后就发现它是根号分段的.然后每一段算一下就好了. #include <cstdio> #include <cstr ...

  8. SpringMVC——返回值类型

    1.void作为返回值类型 如果你的方法写成了Void就跟原来Servlet含义是差不多的 @RequestMapping("/index*") public void first ...

  9. [集训队作业2018]蜀道难——TopTree+贪心+树链剖分+链分治+树形DP

    题目链接: [集训队作业2018]蜀道难 题目大意:给出一棵$n$个节点的树,要求给每个点赋一个$1\sim n$之内的权值使所有点的权值是$1\sim n$的一个排列,定义一条边的权值为两端点权值差 ...

  10. 基本CSS布局二

    基本CSS布局二------基本页面布局二 /*主面板样式*/ #container { width:100%; margin:0px auto;/*主面板DIV居中*/ } /*顶部面板样式*/ # ...