正则表达式是用来处理字符串的强大工具,他并不是某种编程云。

正则表达式拥有独立的承受力引擎,不管什么编程语言,正则表达式的语法都是一样的。

正则表达式的匹配过程

1.一次拿出表达式和文本中的字符比较。

2.如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。

3.如果表达式中有两次或便捷,这个过程会稍微有一些不同。

下面举例一些符号

[....] 

字符集(字符类)。对应的位置可以是字符集中任意字符。字符集中的字符可以猪哥列出,也可以给出范围,如[abc]或[a-c]。第一个字符如果是^则表示取反,如果[^abc]表示不是abc的其他字符。所有的特殊字符在字符集中都是去某原有的特殊含义。在字符集中如果是用]、-或^,可以在前面加上转移字符反斜杠\,或把]、-放在第一个字符,把^放在非第一个字符。

预定义字符集(可以写在字符集[....]中):

\d  数字:[0-9]

\D  非数字:[^\d]

\s  空白符:[<空格>\t\r\n\f\v]

\S  非空白符:[^\s]

\w  单词字符:[A-Za-z0-9_]

\W  飞单词字符:[^\w]

数量词(用在字符或(...)之后)

*  匹配前一个字符0或无限次

+  匹配前一个次1次或无限次

?  匹配前一个次0次或1次

{m}  匹配前一个字符m次

{m,n}  匹配前一个字符m至n次(多于n次则失败)

    m和n可以省略:若省略m,则匹配0至n次;若省略n,则匹配m至无限次

边界匹配(不消耗待匹配字符串中的字符)

^  匹配字符串开头。在多行模式中匹配每一行的开头。

$  匹配字符串末尾。在多行模时匹配每一行的末尾。

\A  仅匹配字符串开头。

\Z  仅匹配字符串末尾。

\b  匹配\w和\W之间

\B  [^\B]

逻辑、分组:

|  代表左右表达式任意匹配一个。(类比于C语言的或语句,它总是先匹配左边的表达式,一旦成功匹配则跳过匹配右边的表达式。如果|没有被包括在()中,则它的范围是整个正则表达式。)

(...)  被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号'(',编号+1.另外,分数表达式作为一个整体,可以后街数量词。表达式中仅在该组中有效。

(?P<name>...)  分组,除了原有的编号外再指定一个额外的别名。

\<number>  引用编号为<number>分组匹配到的字符串。

(?P=name)  引用别名为<name>的分组匹配到的字符串。

特殊构造(不作为分组):

(?:...)  (...)的不分组版本,用于食用'|'或后接数量词。

(?iLmsux)  iLmsux的每个字符代表一个匹配模式,只能用在正则表达式的开头,可选多个。

(?#...)  #后的内容将作为注释被忽略。

(?=...)  之后的字符串内容需要匹配表达式才能成功匹配。不消耗字符串内容。

(?!...)  之后的字符串内容需要不匹配表达式才能成功匹配。不消耗字符串。

(?<=...)  之前的字符串内容需要匹配表达式才能成功匹配。不消耗字符串内容。

(?<!...)  之前的字符串内容需要不匹配表达式才能成功匹配。不消耗字符串内容。

(?(id/name)yes-pattern|no-pattern)  如果编号为id/别名为name的组匹配到字符串,则需要匹配yes-pattern,否则需要匹配no-=attern。[no-pattern]可省略。

数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。

贪婪模式:总是尝试撇皮尽可能多的字符;(Python里数量词默认是贪婪的)

非贪婪模式:总是尝试匹配尽可能少的字符。(在贪婪模式的*或+后加上?,就变成了非贪婪模式)

python中如何使用正则表达式

python中是通过一个叫"re"的包来支持正则表达式。

结果如下:

我们来分析一下pattern = re.compile(r'\d+\.\d*') 这个语句:

\d表示数字[0-9]

+表示重复出现上一次匹配的1次或n次

\.表示字符‘.’

*表示重复出现上一次匹配的0次或n次

r实际上是python告诉编译器这个字符串中的全部转义字符失效,按照原始字符串处理。

所以\d+.\d*实际上是表示匹配一些小数的规则。然而这个表达式并不能正确匹配所有的小数,比如'0.'这样的字符也会被匹配,举这个例子纯粹是为了多讲几个符号。

由于我们已经建立好了一个能够匹配'\d+.\d*'规则的pattern对象。

通过pattern的findall方法就能够匹配到我们想要的字符串。

返回的是一个字符串列表[]。

爬虫前提——正则表达式语法以及在Python中的使用的更多相关文章

  1. 【python爬虫和正则表达式】爬取表格中的的二级链接

    开始进公司实习的一个任务是整理一个网页页面上二级链接的内容整理到EXCEL中,这项工作把我头都搞大了,整理了好几天,实习生就是端茶送水的.前段时间学了爬虫,于是我想能不能用python写一个爬虫一个个 ...

  2. 正则表达式(二)——Python中的相关方法

    正则函数 match.search.findall.finditer.split.sub 返回一个对象:match.search.finditer 返回一个列表:findall.split 其中mat ...

  3. Python中利用函数装饰器实现备忘功能

    Python中利用函数装饰器实现备忘功能 这篇文章主要介绍了Python中利用函数装饰器实现备忘功能,同时还降到了利用装饰器来检查函数的递归.确保参数传递的正确,需要的朋友可以参考下   " ...

  4. 【Python】解析Python中的装饰器

    python中的函数也是对象,函数可以被当作变量传递. 装饰器在python中功能非常强大,装饰器允许对原有函数行为进行扩展,而不用硬编码的方式,它提供了一种面向切面的访问方式. 装饰器 一个普通的装 ...

  5. Python基础之:Python中的异常和错误

    目录 简介 Python中的内置异常类 语法错误 异常 异常处理 抛出异常 异常链 自定义异常 finally 简介 和其他的语言一样,Python中也有异常和错误.在 Python 中,所有异常都是 ...

  6. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

  7. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  8. Python 网络爬虫 009 (编程) 通过正则表达式来获取一个网页中的所有的URL链接,并下载这些URL链接的源代码

    通过 正则表达式 来获取一个网页中的所有的 URL链接,并下载这些 URL链接 的源代码 使用的系统:Windows 10 64位 Python 语言版本:Python 2.7.10 V 使用的编程 ...

  9. 正则表达式与Python中re模块的使用

    正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...

随机推荐

  1. vue导出Excel文件

    1.需要安装file-saver和script-loader.xlsx npm install file-saver / yarn add file-saver npm install script- ...

  2. UI5-技术篇-Expand与Deep 服务测试

    1.SEGW创建服务 2.创建Data Model 2.1Entity Types ZRICO_USR 设置主键.排序字段.过滤字段 ZRICO_USRITM设置主键  2.2Associations ...

  3. nginx编译安装和功能介绍

    nginx介绍 nginx: engine X,是由1994年毕业于俄罗斯国立莫斯科鲍曼科技大学的同学为俄罗斯rambler.ru公司开发的,开发工作最早从2002年开始,第一次公开发布时间是2004 ...

  4. ElasticSearch 连载二 中文分词

    ElasticSearch 连载二 中文分词 上一章ElasticSearch 连载一 基础入门 对Elastic的概念.安装以及基础操作进行了介绍. 那是不是有童鞋会有以下几个问题呢? 什么是中文分 ...

  5. 2星|项立刚《5G时代》:资料堆砌和一些假想设想,信息浓度太低

    “ 这是一本关于5G的书,但着眼点不是要说清楚5G的技术,因为解读5G技术的图书已经有很多,我自己也不是技术专家.本书是希望探讨在一个全新的网络体系下产业的发展与改变,以及5G对社会与经济的影响.P6 ...

  6. zstu月赛 招生

    题目 浙江理工大学招生,一开始有0名学生报考,现在有如下几种情况: 1.增加一名报考学生,报考学生成绩为x: 2.一名成绩为x的学生放弃报考. 3.从现在报考的学生来看,老师想知道如果要招生至少x名学 ...

  7. 【数组模拟-小顶堆的插入构造/遍历】PAT-L2-012.-关于堆的判断--数组模拟

    L2-012. 关于堆的判断 将一系列给定数字顺序插入一个初始为空的小顶堆H[].随后判断一系列相关命题是否为真.命题分下列几种: “x is the root”:x是根结点: “x and y ar ...

  8. P1330 封锁阳光大学[搜索+染色]

    题目来源:洛谷 题目描述 曹是一只爱刷街的老曹,暑假期间,他每天都欢快地在阳光大学的校园里刷街.河蟹看到欢快的曹,感到不爽.河蟹决定封锁阳光大学,不让曹刷街. 阳光大学的校园是一张由N个点构成的无向图 ...

  9. 前端笔记-js

    js在html中的位置 HTML 中的脚本必须位于 <script> 与 </script> 标签之间. 脚本可被放置在 HTML 页面的 <body> 和 < ...

  10. .NET总结一

    因为考试的原因,总结一致拖到现在才写,但必须做一个总结,没有总结相当于没有学过.VB.NET主要是用面向对象的基础来进行程序设计,虽然之前总是能够听到面向对象,但从未真正接触面向对象技术,从VB.NE ...