Python进阶篇之正则表达式常用语法总结

目录
  • 正则表达式概述
  • 1、点-匹配所有字符
  • 2、星号-重复匹配任意次
  • 3、加号-重复匹配多次
  • 4、 花括号-匹配指定次数
  • 5、 问号-贪婪模式和非贪婪模式
  • 6、方括号-匹配几个字符之一
  • 7、起始位置和单行、多行模式
  • 8、括号-组选择
  • 9、反斜杠-对元字符的转义
  • 10、修饰符-可选标志
  • 11、使用正则表达式切割字符串

正则表达式概述

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。正则表达式是一个强大的字符处理工具,其本质是一个字符序列,可以方便检查一个字符串是否与我们定义的字符序列的某种模式相匹配

在python中,正则表达式可以通过import re模块使用,本文将全面介绍正则表达式的使用方法

写在正则表达式里面的普通字符都是表示:直接匹配他们;

但是有一些特殊字符,术语metacharacters(元字符)。它们出现在正则表达式字符串中,不上表示直接匹配他们,而是表达一些特别含义

这些特殊的元字符包括下面这些:

. * + ? \ [ ] ^ $ { } | ( )

我们来分别介绍一下他们的含义:

1、点-匹配所有字符

. 表示要匹配除了换行符之外的任何单个字符

比如,你要从下面的文本中,选择所有的颜色。

苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的

也就是要找到所有以色结尾,并且包括前面的一个字符的词语。也就可以这样写正则表达式.色

其中点代表了任意一个字符,注意是任一个字符。

.色合起来就是表示要找到任意一个字符后面是色这个字,合起来两个字的字符串
范例:

# 导入re模块
import re
#输入文本内容
content='''苹果是绿色的
橙子是橙色的
香蕉是黄色的
乌鸦是黑色的'''
p=re.compile(r'.色')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)

2、星号-重复匹配任意次

*-表示匹配前面的子表达式任意次,包括0次

比如,你要从下面的文本中,选择每行逗号后面的字符串内容,包括逗号本身。注意,这里的逗号是文本的逗号。

苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,

就可以这样写正则表达式,.*。

范例:

# 导入re模块
import re
#输入文本内容
content='''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''
p=re.compile(r',.*')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)

这样就包括逗号在内的后面的字符串都匹配进来了

3、加号-重复匹配多次

+表示匹配前面的子表达式一次或多次,不包括0次

比如,还是上面的例子,你要从文本中,选择每行后面的字符串,包括逗号本身。但是添加一个条件,如果逗号后面没有内容,就不要选择了。

下面的文本中最后一行逗号后面没有内容,就不要选择了

苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,

就可以这样写正则表达式,.+

范例:

# 导入re模块
import re
#输入文本内容
content='''苹果,是绿色的
橙子,是橙色的
香蕉,是黄色的
乌鸦,是黑色的
猴子,'''
p=re.compile(r',.+')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)

这样最后一行逗号后面没有内容,所以最后一行也就不会匹配

4、 花括号-匹配指定次数

花括号表示前面的字符匹配指定的次数

比如,下面文本

红彤彤,绿油油,黑乎乎,绿油油油油

表达式油{3,4}就表示匹配连续的油字至少3次,至多4次

范例:

# 导入re模块
import re
#输入文本内容
content='''红彤彤,绿油油,黑乎乎,绿油油油油'''
p=re.compile(r'绿油{3,4}')#r表示不要进行python语法中对字符串的转译
for one in p.findall(content):
    print(one)

这里就匹配绿后面匹配油至少3次,至多4次的字符串

5、 问号-贪婪模式和非贪婪模式

我们要把下面的字符串中的所有html标签提取出来

得到这样一个列表

很容易想到使用正则表达式<.*>

写出如下代码

# 导入re模块
import re
#输入文本内容
source='<html><head><title>Title</title>'
p=re.compile(r'<.*>')#r表示不要进行python语法中对字符串的转译
print(p.findall(source))

但是运行结果,却是把整个字符串全部匹配上了

怎么回事?原来在正则表达式中,’*’,’+’,’?'都是贪婪的,使用他们时,会尽可能多的匹配内容,所以,<.*>中的星号(表示任意次数的重复),一直匹配到了字符串最后</tlitle>里面同样符合匹配模式。

为了解决整个问题,就需要使用非贪婪模式,也就是在星号后面加上?,变成这样<.*?>

代码改为

# 导入re模块
import re
#输入文本内容
source='<html><head><title>Title</title>'
p=re.compile(r'<.*?>')#r表示不要进行python语法中对字符串的转译
print(p.findall(source))

这样就单独去匹配出来了每一个标签

6、方括号-匹配几个字符之一

方括号表示要匹配某几种类型字符。

比如

[abc]可以匹配a,b,c里面的任意一个字符。等价于[a-c]

a-c中间的-表示一个范围从a到c

如果你想匹配所有小写字母,可以使用[a-z]

一些元字符在方括号内便失去了魔法,变得和普通字符一样了。

比如

[akm.]匹配a k m .里面的任意一个字符

在这里. 在括号不再表示匹配任意字符了,而就是表示匹配.这个字符

例如:

实例 描述
[pP]ython 匹配“Python”或者“python”
rub[ye] 匹配“ruby”或者“rube”

7、起始位置和单行、多行模式

^表示匹配文本的起始位置

正则表达式可以设定单行模式和多行模式

如果是单行模式,表示匹配整个文本的开头位置。

如果是多行模式,表示匹配文本每行的开头位置。

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,

范例:

# 导入re模块
import re
#输入文本内容
source='''001-苹果-60
002-橙子-70
003-香蕉-80'''
p=re.compile(r'^\d+')#r表示不要进行python语法中对字符串的转译
for one in p.findall(source):
    print(one)

运行结果如下

如果去掉complie的第二个参数re.M,运行结果如下

就只进行一行匹配,

因为在单行模式下,^只会匹配整个文本的开头位置

$表示匹配文本的结束位置

如果是单行模式,表示匹配整个文本的结束位置。

如果是多行模式,表示匹配文本每行的结束位置。

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,

如果我们要提取所有的水果编号,用这样的正则表达式\d+$

范例:

# 导入re模块
import re
#输入文本内容
source='''001-苹果-60
002-橙子-70
003-香蕉-80'''
p=re.compile(r'^\d+$',re.M)#re.M进行多行匹配
for one in p.findall(source):
    print(one)

成功匹配到每行最后的价格

8、括号-组选择

主括号称之为正则表达式的组选择。是从正则表达式匹配的内容里面扣取出其中的某些部分

前面,我们有个例子,从下面的文本中,选择每行逗号前面的字符串,也包括逗号本身。

苹果,苹果是绿色的
橙子,橙子是橙色的
香蕉,香蕉是黄色的

就可以这样写正则表达式个^.*,。

但是,如果我们要求不要包括逗号呢?

当然不能直接这样写^.*

因为最后的逗号是特征所在,如果去掉它,就没法找逗号前面的了。

但是把逗号放在正则表达式中,又会包含逗号。

解决问题的方法就是使用组选择符:括号。

我们这样写^(.*),

我们把要从整个表达式中提取的部分放在括号中,这样水果的名字就被单独的放在组group中了。

对应的Python代码如下

# 导入re模块
import re
#输入文本内容
source='''苹果,苹果是绿色的
橙子,橙子是橙色的
香蕉,香蕉是黄色的'''
p=re.compile(r'^(.*),',re.M)#re.M进行多行匹配
for one in p.findall(source):
    print(one)

这样我们就可以把,前的字符取出来了

9、反斜杠-对元字符的转义

反斜杠\在正则表达式中有多种用途

比如,我们要在下面的文本中搜索所有点前面的字符串,也包括点本身

苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的

如果,我们这样写正则表达式.*.,聪明的你肯定发现不对劲。

因为点是一个元字符,直接出现在正则表达式中,表示匹配任意的单个字符,不能表示.这个字符的本身的意思了

怎么办呢?

如果我们要搜索的内容本身就包含元字符,就可以使用反斜杠进行转义

这里我们就应用这样的表达式.*\.

范例:

# 导入re模块
import re
#输入文本内容
source='''苹果.是绿色的
橙子.是橙色的
香蕉.是黄色的'''
p=re.compile(r'.*\.')#r表示不要进行python语法中对字符串的转译
for one in p.findall(source):
    print(one)

成功匹配!

利用反斜杠还可以匹配某种字符类型

反斜杠后面接一些字符,表示匹配某种类型的一个字符

字符 功能
\d 匹配0~9之间的任意一个数字字符,等价于表达式[0-9]
\D 匹配任意一个不上0-9之间的数字字符,等价于表达是[^0-9]
\s 匹配任意一个空白字符,包括空格、tab、换行符等、等价于[\t\n\r\f\v]
\S 匹配任意一个非空白字符,等价于[^\t\tn\r\f\v]
\w 匹配任意一个文字字符,包括大小写、数字、下划线、等于[a-zA-A0-9]
\W 匹配任意一个非文字字符,等价于表达式[^a-zA-Z0-9]

反斜杠也可以用在方括号里面,比如[\s,.]:表示匹配任何空白字符,或者逗号,或者点

10、修饰符-可选标志

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

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响^和$
re.S 使匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响lw,W,Nb,\B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

11、使用正则表达式切割字符串

字符串对象的split()方法只适应于非常简单的字符串分割情形。当你需要更加灵活的切割字符串的时候,就不好用了。

比如,我们需要从下面字符串中提取武将的名字。

我们发现这些名字之间,有的是分号隔开,有的是逗号隔开,有的是空格隔开,而且分割符号周围还有不定数量的空格

names =“关羽;张飞,赵云,马超,黄忠 李逵”

这时,最好使用正则表达式里面的split方法:

范例:

# 导入re模块
import re
#输入文本内容
names ="关羽;张飞,赵云,马超,黄忠  李逵"
namelist=re.split(r'[;,\s]\s*',names)
print(namelist)

正则表达式[;,ls]\s*指定了,分割符为分号、逗号、空格里面的任意一种均可,并且该符号周围可以有不定数量的空格。

以上就是Python进阶篇之正则表达式常用语法总结的详细内容,更多关于Python正则表达式的资料请关注我们其它相关文章!

(0)

相关推荐

  • python 正则表达式语法学习笔记

    正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串.将匹配的子串替换或者从某个串中取出符合某个条件的子串等. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python 语言拥有全部的正则表达式功能. compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. 本文重点给大家介绍python 正则

  • 一文掌握Python正则表达式

    目录 re 模块的使用 匹配方法的使用 re 模块其他方法的使用 正则表达式基础 匹配数字 匹配字符 匹配符号 正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述.匹配某个句法规则的字符串,常被用来检索.替换那些符合某个模式(规则)的文本.最初的正则表达式出现于理论计算机科学的自动控制理论和形式化语言理论中. 安装 Python 解释器/anaconda. 安装好 jupyter lab. re 模块的使用 匹配方法的使用 re.match 尝试从字符串的

  • Python正则表达式以及常用匹配实例

    目录 1 正则表达式对象 2 正则表达式修饰符 - 可选标志 3 正则表达式字符意义 re.match函数 re.search方法 替换re.sub re.compile 函数 findall re.finditer re.split 练习: 补充:Python的re模块两个比较常用的方法 总结 1 正则表达式对象 re.RegexObject re.compile() 返回 RegexObject 对象. re.MatchObject group() 返回被 RE 匹配的字符串. start(

  • Python基础教程之正则表达式基本语法以及re模块

    什么是正则: 正则表达式是可以匹配文本片段的模式. 正则表达式'Python'可以匹配'python' 正则是个很牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下python中的re模块. re模块包含对正则表达式的支持. 通配符 .表示匹配任何字符: '.ython'可以匹配'python'和'fython' 对特殊字符进行转义: 'python\.org'匹配'python.org' 字符集 '[pj]ython'能够匹配'python'和'jython

  • Python知识点详解之正则表达式语法

    目录 Python 正则表达式是什么 怎么用 正则表达式语法 re 库基本用法 re.search 函数 re.match 函数 re.findall 函数 re.split 函数 re.finditer 函数 re.sub 函数 re 库其它函数 扩展知识 总结 Python 正则表达式是什么 学习 Python 正则表达式离不开 re 模块,所以本篇博客会配合 re 模块进行编写. re 库是 Python 中处理正则表达式的标准库,本篇博客介绍 re 库的同时,会简单介绍一下正则表达式语法

  • python中使用正则表达式的方法详解

    目录 search(pattern, string, flags=0) findall(pattern, string, flags=0) sub(pattern, repl, string, count=0, flags=0) compile(pattern, flags=0) flags的一些常用值 总结 在python中使用正则表达式,主要通过下面的几个方法 search(pattern, string, flags=0) 扫描整个string并返回匹配pattern的结果(None或对象

  • Python进阶篇之正则表达式常用语法总结

    目录 正则表达式概述 1.点-匹配所有字符 2.星号-重复匹配任意次 3.加号-重复匹配多次 4. 花括号-匹配指定次数 5. 问号-贪婪模式和非贪婪模式 6.方括号-匹配几个字符之一 7.起始位置和单行.多行模式 8.括号-组选择 9.反斜杠-对元字符的转义 10.修饰符-可选标志 11.使用正则表达式切割字符串 正则表达式概述 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模

  • python基础篇之pandas常用基本函数汇总

    目录 前言 1.汇总函数 2.特征统计函数 3.唯一值函数 4.替换函数 总结 前言 这篇主要整理pandas常用的基本函数,主要分为五部分: 汇总函数 特征统计函数 唯一值函数 替换函数 排序函数 1.汇总函数 常用的主要是4个: tail(): 返回表或序列的后n行 head(): 返回表或序列的前n行 info(): 返回表的信息概况 describe(): 返回表中数值列对应的主要统计量 n默认为5 df.describe() #运行截图 Height Weight count 183.

  • javascript 进阶篇1 正则表达式,cookie管理,userData

    首先,什么事正则表达式呢,其实引入概念很多时候并不能帮我们明白它到底是什么,所以我先简单描述下,正则表达式,其实就是一个记录字符串规则则的字符串,等我们看完这一部分,也就能明白它到底是什么了. 基本语法:正则表达式就是"/expression/"+表示搜索范围的符号.例如我们要找function这个关键词,就是/function/gi,其中g表示global,就是全局搜索,i表示ignor,就是忽略大小写. 在js中,我们通过RegExp类来实现. 这个类里面有很多很多的符号用来表示不

  • Python进阶篇之字典操作总结

    一.与字典值有关的计算 问题 想对字典的值进行相关计算,例如找出字典里对应值最大(最小)的项. 解决方案一: 假设要从字典 {'a':3, 'b':2, 'c':6} 中找出值最小的项,可以这样做: >>> d = {'a':3, 'b':2, 'c':6} >>> min(zip(d.values(), d.keys())) (2, 'b') 值得注意的是  d.values() 获取字典的全部值,d.keys() 获取字典的全部键,而且两个序列的顺序依然保持一一对应

  • Python入门篇之正则表达式

    正则表达式有两种基本的操作,分别是匹配和替换. 匹配就是在一个文本字符串中搜索匹配一特殊表达式: 替换就是在一个字符串中查找并替换匹配一特殊表达式的字符串.   1.基本元素   正则表达式定义了一系列的特殊字符元素以执行匹配动作. 正则表达式基本字符 字符 描述 text 匹配text字符串 . 匹配除换行符之外的任意一个单个字符 ^ 匹配一个字符串的开头 $ 匹配一个字符串的末尾 在正则表达式中,我们还可用匹配限定符来约束匹配的次数.   匹配限定符 最大匹配 最小匹配 描述 * * 重复匹

  • Python进阶篇之多线程爬取网页

    目录 一.前情提要 二.并发的概念 三.并发与多线程 四.线程池 一.前情提要 相信来看这篇深造爬虫文章的同学,大部分已经对爬虫有不错的了解了,也在之前已经写过不少爬虫了,但我猜爬取的数据量都较小,因此没有过多的关注爬虫的爬取效率.这里我想问问当我们要爬取的数据量为几十万甚至上百万时,我们会不会需要要等几天才能将数据全都爬取完毕呢? 唯一的办法就是让爬虫可以 7×24 小时不间断工作.因此我们能做的就是多叫几个爬虫一起来爬数据,这样便可大大提升爬虫的效率. 但在介绍Python 如何让多个爬虫一

  • 关于正则表达式基本语法的应用详解(必看篇)

    1.正则表达式基本语法 两个特殊的符号'^'和'$'.他们的作用是分别指出一个字符串的开始和结束.例子如下: "^The":表示所有以"The"开始的字符串("There","The cat"等): "of despair$":表示所以以"of despair"结尾的字符串: "^abc$":表示开始和结尾都是"abc"的字符串--呵呵,只有&qu

  • 一文搞懂正则表达式基础语法以及如何应用

    目录 一.正则表达式 1.基本介绍 2.正则表达式语法 二.正则语法 1.字符匹配符.选择匹配符 2.限定符 3.定位符 4.分组 三.常用类 1.基本介绍 2.分组.捕获.反向引用 3.String 类中使用正则表达式 总结 一.正则表达式 1.基本介绍 概述 一个正则表达式,就是用某种模式去匹配字符串的一个公式.很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过练习后就觉得这些复杂的表达式写起来还是相当简单的, 而且, 一旦你弄懂它们,你就能把数小时辛苦而且易错的文本处理工作缩短

  • 正则表达式RegExp语法与用法详解

    目录 正则表达式的定义和用途 创建正则表达式 方式一:使用构造函数创建 方式二:使用字面量创建 正则表达式的语法 匹配字符 简写 模式修正符 贪婪匹配 断言 正则表达式的使用 搜索第一个符合条件的字符串 search() 搜索所有符合条件的字符串 match() 字符串拆分成数组 split() 字符串替换 replace() 过滤HTML标签 去除空格 常用正则表达式 总结 正则表达式的定义和用途 正则表达式用于定义一些字符串的规则.计算机可以根据正则表达式,来检查一个字符串是否符合指定的规则

随机推荐