此曲只应天上有,人间难得几回闻。

/1 前言/

这次给大家主要是介绍Python中的正则表达式,及其相关函数的基本使用方法,并且捎带一些正则表达式给我们带来的便利。

/2 简介/

Python 自1.5版本起增加了re 模块,它提供 Perl风格的正则表达式模式。re 模块使得Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。

/3 re.match函数/

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。语法如下所示:

re.match(pattern, string, flags=0)

“pattern”匹配的正则表达式“string”要匹配的字符串“flags”标志位。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num)或 groups() 匹配对象函数来获取匹配表达式。

group(num=0) 匹配的整个表达式的字符串,“group()”可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

下图是个实际例子:

输出结果如下图所示:

/4 检索和替换/

Python 的re模块提供了re.sub用于替换字符串中的匹配项。语法如下所示:

re.sub(pattern, repl, string, count=0, flags=0)

参数:

pattern : 正则中的模式字符串。

repl : 替换的字符串,也可为一个函数。

string : 要被查找替换的原始字符串。

count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

flags : 编译时用的匹配模式,数字形式。

前三个为必参数,后两个为可选参数。

下图是个实际例子:

输出结果如下图所示:

/5 compile函数/

compile 函数用于编译正则表达式,供match() 和 search() 这两个函数使用。语法格式为:

re.compile(pattern[, flags])

参数:

pattern : 一个字符串形式的正则表达式

flags 可选,表示匹配模式,比如忽略大小写,多行模式等,具体参数为:

re.I 忽略大小写

re.L 表示特殊字符集 \w,\W, \b, \B, \s, \S 依赖于当前环境

re.M 多行模式

re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)

re.U 表示特殊字符集 \w,\W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库

re.X 为了增加可读性,忽略空格和'# '后面的注释

/6 正则表达式对象/

re.RegexObject:re.compile() 返回RegexObject 对象。

re.MatchObject:group() 返回被 RE 匹配的字符串。

start() 返回匹配开始的位置

end() 返回匹配结束的位置

span() 返回一个元组包含匹配 (开始,结束) 的位置

/7 正则表达式修饰符 - 可选标志/

正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I| re.M 被设置成 I 和 M 标志:

re.I

使匹配对大小写不敏感

re.L

做本地化识别(locale-aware)匹配

re.M

多行匹配,影响 ^ 和 $

re.S

使 . 匹配包括换行在内的所有字符

re.U

根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X

该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

/8 正则表达式模式/

模式字符串使用特殊的语法来表示一个正则表达式:

字母和数字表示他们自身。一个正则表达式模式中的字母和数字匹配同样的字符串。

多数字母和数字前加一个反斜杠时会拥有不同的含义。

标点符号只有被转义时才匹配自身,否则它们表示特殊的含义。

反斜杠本身需要使用反斜杠进行转义。

由于正则表达式通常都包含反斜杠,所以你最好使用原始字符串来表示它们。模式元素(如 r'\t',等价于 \\t )匹配相应的特殊字符。

下表列出了正则表达式模式语法中的特殊元素。如果你使用模式的同时提供了可选的标志参数,某些模式元素的含义会改变。

正则表达式实例

字符匹配

实例

描述

python

匹配 "python".

字符类

/9 实际应用/

以猫眼电影为例。我们需要获取(电影的名字作者,上映时间)等等都可以用正则表达式来解析。

分析一下,利用正则表达式提取。

可以看到我们要的名字在一个a里面,而他们被一个div包裹着。

我们把div想象成一个盒子,可以看到div里面还有一个div 我们可以先找他上面一层的div是一个表单

一般来说我们找到前两层就可以找到我们要的结果。如果不对就再找几层。

分析完再实际操作一下:

pattern = re.compile('
.*?title="(.*?)".*?class="star">(.*?).*?releasetime">(.*?)',re.S)

    (.*?)表示我们要的内容

(.*?)

里面的主演也是我们要的这样我们就可以得到我们想要得多个数据。

/10 小结/

    1. 正则表达式适合一些需要获取多个数据的场景。它能够以更快捷的方式去获取到我们想要的数据。

    2. 本文主要介绍了正则表达式,及其基本用法,具体每个字符的用法,可以参考前言里边的正则表达式系列文章,希望能够帮助大家更好的了解正则表达式的用法。

    3. 想学习更多关于Python的知识,可以参考学习网址:http://pdcfighting.com/

------------------- End -------------------

js 正则表达式奇偶字符串替换_Python中的正则表达式及其常用匹配函数用法简介...相关推荐

  1. python中all函数的用法_python中map、any、all函数用法分析

    这篇文章主要介绍了 python 中 map . any . all 函数用法 , 实例分析了 map . any . all 函数 的相关使用技巧 , 具有一定参考借鉴价值 , 需要的朋友可以参考下 ...

  2. js 正则表达式奇偶字符串替换_JS利用正则配合replace替换指定字符

    替换指定字符的方法有很多,在本文为大家详细介绍下,JS利用正则配合replace是如何做到的,喜欢的朋友可以参考下 定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一 ...

  3. js 正则表达式奇偶字符串替换_js正则表达式replace替换变量方法

    JavaScript正则实战(会根据最近写的不断更新) 1.javascript 正则对象替换创建 和用法: /pattern/flags 先简单案例学习认识下replace能干什么 正则表达式构造函 ...

  4. python 字符串替换_Python中的字符串替换操作示例

    这篇文章主要介绍了Python中的字符串替换操作示例,包括一则使用字符串模板string.Template的例子及一则使用正则表达式的例子, 字符串的替换(interpolation), 可以使用st ...

  5. python 字符串替换_python中如何替换字符串中的\\符号?

    转移字符的情况下,\\=\. 楼主说不行,我还专门测试了下. a = '{"code":"A00185","data":"\\u5 ...

  6. python eval 字符串替换_Python中eval妙用,字符串转字典和列表

    功能:将字符串str当成有效的表达式来求值并返回计算结果. 语法: eval(source[, globals[, locals]]) -> value 参数: source:一个Python表 ...

  7. linux c中字符替换函数,Linux C 支持正则表达式的字符串替换函数

    [root@localhost src]# cat a.c /** * Linux C 支持正则表达式的字符串替换函数 * * Author: cnscn@163.com * Homepage: ww ...

  8. python字符串正则替换_Python用正则表达式进行字符串替换方法

    Python正则表达式在使用中会经常应用到字符串替换的代码.这篇文章主要介绍了Python正则表达式如何进行字符串替换,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. Python正则表达式在使用 ...

  9. oracle中trim,ltrim,rtrim函数用法(简单易懂)

    oracle中trim,ltrim,rtrim函数用法 用法一.去空格 函数 作用 TRIM TRIM()去除指定字符串的前后空格 LTRIM LTRIM()去除指定字符串的前面空格 RTRIM RT ...

最新文章

  1. java datahandler_Java Web Services:使用DataHandler类发送文件
  2. MySQL数据库have_openss_MySQL 关于OpenSSL证书支持检查方式
  3. GAN网络生成:感知损失(Perceptual Losses)
  4. 关于mysql服务器3306端口不能远程连接的解决
  5. (译)如何用命令行在windows Azure上安装负载平衡的web Farm虚拟机(linux或其他)...
  6. 若非必要请勿直接使用@_
  7. android 最新消息滚动,Android 滚动操作Scroller类详解
  8. ftp服务器文件名存在,有什么办法根据已知文件名来检测FTP服务器上是否存在该文件? 急...
  9. c语言100以内加减乘除法,一百以内的加减乘除法游戏....
  10. 用javascript实现(页面正在加载的效果)
  11. ios项目中使用gcd的场景_iOS中超级超级详细介绍GCD
  12. [2018.07.26 T1] 航线规划
  13. VulnHub渗透实战--Bytesec
  14. 一个清华学子写的关于directshow的学习心得
  15. 基于PHP+MySQL的网上图书店商城在线销售系统
  16. 解决 device is busy 的问题
  17. python实现火车票查询_python实现12306火车票查询的实例全过程
  18. FasterR-CNN,R-FCN,SSD,FPN,RetinaNet,YOLOv3速度和准确性比较
  19. 亮眼财报业绩背后,难掩富途控股估值陷阱
  20. 比基尼新娘沉醉花海之爱。(组图)

热门文章

  1. 程序包com.sun.image.codec.jpeg.JPEGCo不存在解决办法
  2. 最简单的nagios监控内存插件(shell)
  3. 解决在AX 2009中删除公司时提示:未授权用户##删除表“DEL_PBATRANSLATECONSISTOF”中的记录...
  4. iOS 快速定位到系统设置界面
  5. Apache Kudu 1.9.0 发布,支持位置感知
  6. lnmp/nginx系统真正有效的图片防盗链完整设置详解
  7. PowerCLI脚本,利用哈希表对参数进行转换
  8. 转-OpenJDK源码阅读导航跟编译
  9. 黄聪:百度知道中对HTML字符实体、字符编号,开头字符的使用
  10. Active Directory操作主机详解