什么是正则:

正则表达式是可以匹配文本片段的模式。

正则表达式'Python'可以匹配'python'

正则是个很牛逼的东西,python中当然也不会缺少。

所以今天的Python就跟大家一起讨论一下python中的re模块。

re模块包含对正则表达式的支持。

通配符

.表示匹配任何字符:

‘.ython'可以匹配'python'和'fython'

对特殊字符进行转义:

‘python\.org'匹配‘python.org'

字符集

‘[pj]ython'能够匹配'python'和'jython'

反转字符集

‘[^abc]'可以匹配除了abc之外的任何字符

选择符

使用管道符号|

可选项

加上问好就变为了可选项:

r'(http://)?(www.)?python.org‘只能匹配下面几种:

'http://www.python.org'

'http://python.org'

'www.python.org'

'python.org'

重复子模式

*:允许模式重复0次或多次

+:允许模式重复1次或多次

{m, n}允许模式重复m-n次

当然,正则语法规则很多,远不止上面的这些。但是我们只能点到为止了,因为这篇博客的目的是介绍Python中的模块,re模块。

re 模块使 Python 语言拥有全部的正则表达式功能。

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

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

re中重要的函数:

compile(pattern[, flags]) 根据包含正则表达式的字符串创建模式对象

search(pattern, string[, flags]) 在字符串中寻找模式

match(pattern, string[, flags]) 在字符串的开始处匹配模式

split(pattern, string[, maxsplit=0]) 根据匹配项分割字符串

findall(pattern, string) 列出字符串中模式的所有匹配项

sub(pat, rep, string[, count=0]) 字符串中所有pat的匹配项用repl替换

escape(string) 将字符串中所有特殊表达式字符转义

下面就进行简单的应用:

使用match

import re

print(re.match('www', 'www.runoob.com').span()) # 在起始位置匹配

print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配

使用search

import re

print(re.search('www', 'www.runoob.com').span()) # 在起始位置匹配

print(re.search('com', 'www.runoob.com').span()) # 不在起始位置匹配

这时候需要停一下,match和search的区别呢?

看看结果先:

match例子中结果:

(0, 3)

None

search例子中结果:

(0, 3)

(11, 14)

match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配;

也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话,match()就返回none。

search()会扫描整个字符串并返回第一个成功的匹配。

使用sub

Python 的re模块提供了re.sub用于替换字符串中的匹配项。

#!/usr/bin/python

import re

phone = "2004-959-559 # This is Phone Number"

# Delete Python-style comments

num = re.sub(r'#.*$', "", phone)

print "Phone Num : ", num

# Remove anything other than digits

num = re.sub(r'\D', "", phone)

print "Phone Num : ", num

结果:

Phone Num : 2004-959-559

Phone Num : 2004959559

最后献上菊花:

^ 匹配字符串的开头

$ 匹配字符串的末尾。

. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。

[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k'

[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。

re* 匹配0个或多个的表达式。

re+ 匹配1个或多个的表达式。

re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

re{ n}

re{ n,} 精确匹配n个前面表达式。

re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式

a| b 匹配a或b

(re) G匹配括号内的表达式,也表示一个组

(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。

(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。

(?: re) 类似 (...), 但是不表示一个组

(?imx: re) 在括号中使用i, m, 或 x 可选标志

(?-imx: re) 在括号中不使用i, m, 或 x 可选标志

(?#...) 注释.

(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。

(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功

(?> re) 匹配的独立模式,省去回溯。

\w 匹配字母数字

\W 匹配非字母数字

\s 匹配任意空白字符,等价于 [\t\n\r\f].

\S 匹配任意非空字符

\d 匹配任意数字,等价于 [0-9].

\D 匹配任意非数字

\A 匹配字符串开始

\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。c

\z 匹配字符串结束

\G 匹配最后匹配完成的位置。

\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。

\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。

\n, \t, 等. 匹配一个换行符。匹配一个制表符。等

\1...\9 匹配第n个分组的子表达式。

\10 匹配第n个分组的子表达式,如果它经匹配。否则指的是八进制字符码的表达式。

re的正则表达式语法

正则表达式语法表如下:

语法

意义

说明

"."

任意字符

"^"

字符串开始

'^hello'匹配'helloworld'而不匹配'aaaahellobbb'

"$"

字符串结尾

与上同理

"*"

0 个或多个字符(贪婪匹配)

匹配

"+"

1 个或多个字符(贪婪匹配)

与上同理

"?"

0 个或多个字符(贪婪匹配)

与上同理

*?,+?,??

以上三个取第一个匹配结果(非贪婪匹配)

匹配

本文标题: Python基础教程之正则表达式基本语法以及re模块

本文地址: http://www.cppcns.com/jiaoben/python/145653.html

python中的正则表达式语法_Python基础教程之正则表达式基本语法以及re模块相关推荐

  1. python可以这样学读后感_Python基础教程的读后感10篇

    <Python基础教程>是一本由Magnus Lie Hetland著作,人民邮电出版社出版的平装图书,本书定价:69.00元,页数:471,文章吧小编精心整理的一些读者的读后感,希望对大 ...

  2. python中print的本质_Python基础语法全解

    一.Python简介 1. 了解Python Python是一种解释型(这意味着开发过程中没有了编译这个环节).面向对象(支持面向对象的风格或代码封装在对象的编程技术).动态数据类型的交互式(可在命令 ...

  3. python自定义函数详解_python基础教程之自定义函数介绍

    函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以 ...

  4. python中的封装调用_Python基础之封装

    一.什么是封装 在程序设计中,封装(Encapsulation)是对具体对象的一种抽象,即将某些部分隐藏起来,在程序外部看不到,其 含义是其他程序无法调用. 要了解封装,离不开"私有化&qu ...

  5. python中的real函数_RealPython 基础教程:Python 字符串用法详解

    字符串是一个由字符数据组成的序列.字符串处理是编程必备的技能,很少有应用程序不需要操作字符串的. Python 提供了丰富的运算符.函数和类方法来操作字符串. 通过本文,你将了解如何访问字符串以及提取 ...

  6. python函数的唯一标识_python基础教程Python通用唯一标识符uuid模块使用案例

    1. 背景知识: UUID: 通用唯一标识符 ( Universally Unique Identifier ), 对于所有的UUID它可以保证在空间和时间上的唯一性. 它是通过MAC地址, 时间戳, ...

  7. python中面向对象编程简称为_Python基础-面向对象编程

    本文完全转载自廖雪峰大神的教程: 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  8. python雷达图详解_Python基础教程 - matplotlib实现雷达图和柱状图

    原标题:Python基础教程 - matplotlib实现雷达图和柱状图 Python基础教程记录 - 使用matplotlib实现雷达图和柱状图. 注:主要是设置add_subplot(133),分 ...

  9. python中byte2array报错_python基础-bytes和bytearray的用法

    Python中的序列类型有bytes和bytearray. 二进制序列类型的用法比较少见,是python中少用的一种序列类型,对于二进制序列类型,大家基本了解即可. bytes二进制序列类型 指定长度 ...

最新文章

  1. c语言结果用全局变量返回,c语言参数传递和返回值及变量存储.doc
  2. 重要接口—NavigableSet接口
  3. Java小知识-----Map 按Key排序和按Value排序
  4. Linux CPU 信息查看
  5. 【BZOJ2226】LCM SUM,数论之一维LCM(莫比乌斯反演)
  6. Linux系统管理01--系统命令精讲
  7. 基于Linux的集群系统(三)
  8. 程序员的故事 007 程序员是吃青春饭的
  9. 一文读懂长非编码RNA(lncRNA)的分类、功能及测序鉴定方法
  10. 聚名企服商标注册流程及资料(2022新版新手教程)
  11. 揭秘,两个大西瓜竟然能合成它...
  12. 凑巧,电脑的双系统删除了2345的残留服务和缓存!
  13. 戴尔将为奔驰多款车型设计专业的车载智能系统
  14. 常常反思,让你变成更好的自己
  15. 990php,音频牛绝配 DIY音频专用分立运放OP990初测
  16. 数据库高级(校招冲刺必备)
  17. 方案怎么写,才能打动客户?哪些内容才是客户眼中的干货?
  18. AW codec驱动跨平台移植
  19. CSS font-size属性
  20. 利用cuteftp上传并修改网站上内容

热门文章

  1. Microbiome:马铃薯疮痂病与土壤微生物组关系新进展
  2. 玩转花式截图、录屏——FastStoneCapture使用指南
  3. R语言广义线性模型函数GLM、(Model fit and regression diagnostics)、模型充分性评估方法、使用plot函数以及car包函数
  4. R语言使用plot函数和lines函数可视化线图(line plot)时、图之间的主要区别是由选项type产生的、type参数常用参数说明、不同type生成的可视化图像对比
  5. pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有工作日日期(business day)
  6. matplotlib可视化基本散点图、在图像指定区域绘制方框并进行自定义色彩填充(Draw Rectangle filled with color)
  7. pandas为dataframe添加新的数据行(rows)、在dataframe后面纵向添加一行数据(数据为列表list形式)、列有不匹配将会使用NA值进行填补
  8. Pandas判断dataframe是否为空
  9. CLI、终端 (Terminal)、Shell、TTY、Console、Bash都是什么?
  10. 构建聊天机器人:检索、seq2seq、RL、SeqGAN