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

目录
  • Python 正则表达式是什么
  • 怎么用
    • 正则表达式语法
    • re 库基本用法
    • re.search 函数
    • re.match 函数
    • re.findall 函数
    • re.split 函数
    • re.finditer 函数
    • re.sub 函数
    • re 库其它函数
  • 扩展知识
  • 总结

Python 正则表达式是什么

学习 Python 正则表达式离不开 re 模块,所以本篇博客会配合 re 模块进行编写。

re 库是 Python 中处理正则表达式的标准库,本篇博客介绍 re 库的同时,会简单介绍一下正则表达式语法, 如果想深入学习正则表达式,还需要好好下一番功夫。

怎么用

正则表达式语法

正则表达式语法由字符和操作符构成,初期阶段掌握下述这些内容即可。

操作符 说明 例子
. 任何单个字符,极少不能匹配  
[] 字符集,对单个字符给出取值范围 [abc] 表示匹配 a、b、c,[a-z] 表示 a 到 z 单个字符
[^] 非字符集,对单个字符给出排除范围 [^abc] 表示匹配 非 a、非 b、非 c 的单个字符
* 前一个字符 0 次或无限次扩展 abc* 表示 ab、abc、abcc、abccc 等
+ 前一个字符 1 次或无限次扩展 abc+ 表示 abc、abcc、abccc 等
? 前一个字符 0 次或 1 次 abc? 表示 ab、abc
| 左右表达式任意一个 abc|def 表示 abc 或者 def
{m} 扩展前 1 个字符 m 次 ab{2}c,表示 abbc
{m,n} 扩展前 1 个字符 m 到 n 次 ab{1,2}c,表示 abc、abbc
^ 匹配字符串开头 ^abc 表示 abc 在字符串开头
$ 匹配字符串结尾 abc$ 表示 abc 在字符串结尾
() 分组标记,内部仅能使用 | 操作符 (abc) 表示 abc,(a
\d 数字,等价于 [0-9]  
\w 字符,等价于 [A-Za-z0-9]  

以上表示仅仅为正则表达最基础部分内容,如果希望深入研究正则表达式,建议寻找更加全面的资料进行学习,本文只做药引。

re 库基本用法

re 库主要函数如下:

  • 基础函数:compile;
  • 功能函数:search、match、findall、split、finditer、sub。

在正式学习之前,先了解一下原生字符串。

在 Python 中,表示原生字符串,需要在字符串前面加上 r。 例如 my_str = 'i'am xiangpica' 在程序中会直接报错, 如果希望字符串中 ' 可以正常运行,需要加上转移字符 \,修改为 my_str = 'i\'am xiangpica'。 但这样结合上文正则表达式中的操作符,就会出现问题,因为 \ 在正则表达式中是有真实含义的, 如果你使用 re 库去匹配字符串中的 \,那需要使用 4 个反斜杠,为了避免这种情况出现,引入了原生字符串概念。

# 不使用原生字符串的正则表达式  "\\\\"
# 使用原生字符串的正则表达式 r"\\"

在后文会有实际的应用。

接下来在学习一个案例,例如下述代码:

my_str='C:\number'

print(my_str)
C:
umber

本段代码的输出效果如下,\n 被解析成了换行,如果想要屏蔽这种现象,使用 r 即可:

my_str=r'C:\number'

print(my_str)

输出 C:\number。

re.search 函数

该函数用于,在字符串中搜索正则表达式匹配到的第一个位置的值,返回 match 对象。 函数原型如下:

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

需求:在字符串 梦想橡皮擦 good good 中匹配 橡皮擦。

import re
my_str='梦想橡皮擦 good good'
pattern = r'橡皮擦'

ret = re.search(pattern,my_str)
print(ret)

返回结果:<re.Match object; span=(2, 5), match='橡皮擦'>。

search 函数的第三个参数 flags 表示正则表达式使用时的控制标记。

  • re.I,re.IGNORECASE:忽略正则表达式的大小写;
  • re.M,re.MULTILINE:正则表达式中的 ^ 操作符能够将给定字符串的每行当做匹配的开始;
  • re.S,re.DOTALL:正则表达式中的 . 操作符能够匹配所有字符。

最后将匹配到的字符串进行输出,使用下述代码即可实现。

import re
my_str = '梦想橡皮擦 good good'
pattern = r'橡皮擦'

ret = re.search(pattern, my_str)
if ret:
    print(ret.group(0))

re.match 函数

该函数用于在目标字符串开始位置去匹配正则表达式,返回 match 对象,未匹配成功返回 None,函数原型如下:

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

一定要注意是目标字符串开始位置。

import re
my_str = '梦想橡皮擦 good good'
pattern = r'梦' # 匹配到数据
pattern = r'good' # 匹配不到数据

ret = re.match(pattern, my_str)
if ret:
    print(ret.group(0))

re.match 和 re.search 方法都是一次最多返回一个匹配对象,如果希望返回多个值, 可以通过在 pattern 里加括号构造匹配组返回多个字符串。

re.findall 函数

该函数用于搜索字符串,以列表格式返回全部匹配到的字符串,函数原型如下:

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

测试代码如下:

import re
my_str = '梦想橡皮擦 good good'
pattern = r'good'
ret = re.findall(pattern, my_str)
print(ret)

re.split 函数

该函数将一个字符串按照正则表达式匹配结果进行分割,返回一个列表。 函数原型如下:

re.split(pattern, string, maxsplit=0, flags=0)

re.split 函数进行分割的时候,如果正则表达式匹配到的字符恰好在字符串开头或者结尾, 返回分割后的字符串列表首尾都多了空格,需要手动去除,例如下述代码:

import re
my_str = '1梦想橡皮擦1good1good1'

pattern = r'\d'

ret = re.split(pattern, my_str)

print(ret)

运行结果:

['', '梦想橡皮擦', 'good', 'good', '']

切换为中间的内容,则能正确的分割字符串。

import re
my_str = '1梦想橡皮擦1good1good1'

pattern = r'good'

ret = re.split(pattern, my_str)

print(ret)

如果在 pattern 中捕获到括号,那括号中匹配到的结果也会在返回的列表中。

import re
my_str = '1梦想橡皮擦1good1good1'

pattern = r'(good)'

ret = re.split(pattern, my_str)

print(ret)

运行结果,你可以对比带括号和不带括号的区别进行学习:

['1梦想橡皮擦1', 'good', '1', 'good', '1']

maxsplit 参数表示最多进行分割次数, 剩下的字符全部返回到列表的最后一个元素, 例如设置匹配 1 次,得到的结果是 ['1梦想橡皮擦1', '1good1']。

re.finditer 函数

搜索字符串,并返回一个匹配结果的迭代器,每个迭代元素都是 match 对象。 函数原型如下:

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

测试代码如下:

import re
my_str = '1梦想橡皮擦1good1good1'

pattern = r'good'

# ret = re.split(pattern, my_str,maxsplit=1)
ret =re.finditer(pattern, my_str)
print(ret)

re.sub 函数

在一个字符串中替换被正则表达式匹配到的字符串,返回替换后的字符串, 函数原型如下:

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

其中 repl 参数是替换匹配字符串的字符串,count 参数是匹配的最大替换次数。

import re
my_str = '1梦想橡皮擦1good1good1'

pattern = r'good'

ret = re.sub(pattern, "nice", my_str)
print(ret)

运行之后,得到替换之后的字符串:

1梦想橡皮擦1nice1nice1

re 库其它函数

其它比较常见的函数有:re.fullmatch(),re.subn(),re.escape(), 更多内容可以查阅 官方文档,获取一手资料。

扩展知识

使用 re 库匹配字符串之后,会返回 match 对象,该对象具备以下属性和方法。

你可以顺着这条线继续学习下去。

总结

到此这篇关于Python知识点详解之正则表达式语法的文章就介绍到这了,更多相关Python正则表达式语法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

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

  • Python语法学习之正则表达式的使用详解

    目录 正则表达式中的特殊字符 正则表达式的使用 正则小案例 - 1 正则小案例 - 2 正则小案例 - 3 要想成功的进行字符串的匹配需要使用到正则表达式模块,正则表达式匹配规则以及需要被匹配的字符串.在这三个条件中,模块与字符串都是准备好的,只有匹配规则异常的灵活,而今天这个章节就是认识一下正则表达式中的特殊字符,通过这些字符就可以针对我们想要的数据进行匹配. 正则表达式中的特殊字符 特殊字符 描述 \d 匹配任何十进制的数字,与[0-9]一致 \D 匹配任意非数字 \w 匹配任何字母数字下划

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

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

  • Python语法学习之正则表达式的量词汇总

    目录 正则表达式中的符号 示例 - 1 示例 - 2 示例 - 3 示例 - 4 示例 - 5 示例 - 6 示例 - 7 示例 - 8 组的概念 贪婪模式与非贪婪模式 正则表达式中的符号 符号 描述 re1 | re2 匹配正则表达式 re1 或者 re2 :re1 与 re2 代表两个匹配的字符串信息 ^ 匹配字符串起始部分 $ 匹配字符串终止部分(也就是末尾部分) * 匹配0次或者多次前面出现的正则表达式 + 匹配1次或者多次前面出现的正则表达式 {N} 匹配 N 次前面出现的正则表达式

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

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

  • 详解Java正则表达式语法

    分享的Java正则表达式语法和示例如下 1.匹配验证-验证Email是否正确 public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式

  • 详解js正则表达式语法介绍

    本文介绍了js正则表达式,具体如下: 1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符. 举例1:表达式 "c",在匹配字符串 "abcde" 时,匹配结果是:成功:匹配到的内容是:"c":匹配到的位置是:开始于2,结束于3.(注:下标从0开始还是从1开始,因当前编程语言的不同而可能不同)

  • 关于python的缩进规则的知识点详解

    一般的语言都是通过{}或end来作为代码块的标记,而Python则是通过缩进来识别代码块的. 对于Python的这种"缩进"风格,喜欢它的人说这是一种乐趣:不喜欢它的人说这是一门需要卡尺的语言,因为需要使用"游标卡尺"去测量每行代码的缩进. 不管怎么样,Python的开发者有意让违反了缩进规则的程序不能通过编译,以此让程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退出,而非使用{}或者其他字符. 今天就简单和大家介绍一下Python缩进的方

  • python源文件的字符编码知识点详解

    默认情况下,Python 源码文件以 UTF-8 编码方式处理.在这种编码方式中,世界上大多数语言的字符都可以同时用于字符串字面值.变量或函数名称以及注释中--尽管标准库中只用常规的 ASCII 字符作为变量或函数名,而且任何可移植的代码都应该遵守此约定.要正确显示这些字符,你的编辑器必须能识别 UTF-8 编码,而且必须使用能支持打开的文件中所有字符的字体. 1.如果不使用默认编码,要声明文件所使用的编码,文件的第一行要写成特殊的注释. 语法如下所示: # -*- coding: encodi

  • python程序文件扩展名知识点详解

    python程序文件的扩展名称是什么 python程序的扩展名有.py..pyc..pyo和.pyd..py是源文件,.pyc是源文件编译后的文件,.pyo是源文件优化编译后的文件,.pyd是其他语言写的python库. 扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py:py就是最基本的源码扩展名.windows下直接双击运行会调用python.exe执行. pyw:pyw是另一种源码扩展名,跟py唯一的区别是在windows

  • cookies应对python反爬虫知识点详解

    在保持合理的数据采集上,使用python爬虫也并不是一件坏事情,因为在信息的交流上加快了流通的频率.今天小编为大家带来了一个稍微复杂一点的应对反爬虫的方法,那就是我们自己构造cookies.在开始正式的构造之前,我们先进行简单的分析如果不构造cookies爬虫时会出现的一些情况,相信这样更能体会出cookies的作用. 网站需要cookies才能正常返回,但是该网站的cookies过期很快,我总不能用浏览器开发者工具获取cookies,然后让程序跑一会儿,每隔几分钟再手动获取cookies,再让

  • python分布式爬虫中消息队列知识点详解

    当排队等待人数过多的时候,我们需要设置一个等待区防止秩序混乱,同时再有新来的想要排队也可以呆在这个地方.那么在python分布式爬虫中,消息队列就相当于这样的一个区域,爬虫要进入这个区域找寻自己想要的资源,当然这个是一定的次序的,不然数据获取就会出现重复.就下来我们就python分布式爬虫中的消息队列进行详细解释,小伙伴们可以进一步了解一下. 实现分布式爬取的关键是消息队列,这个问题以消费端为视角更容易理解.你的爬虫程序部署到很多台机器上,那么他们怎么知道自己要爬什么呢?总要有一个地方存储了他们

  • python PaddleOCR库用法及知识点详解

    说明 1.PaddleOCR是基于深度学习的ocr识别库,中文识别精度相当还不错,能够应对大多数文字提取需求. 2.需要依次安装三个依赖库,shapely库可能会受到系统的影响,出现安装错误. 安装命令 pip install paddlepaddle pip install shapely pip install paddleocr 代码实现 ocr = PaddleOCR(use_angle_cls=True,) # 输入待识别图片路径 img_path = r"d:\Desktop\4A3

  • python字符串驻留机制的使用范围知识点详解

    1.字符串的长度为0和1时. 2.符合标识符的字符串. 3.字符串只在编译时进行驻留,而非运行时. 4.[-5,256]之间的整数数字. 实例 >>> str1='jiumo' >>> str2='jiumo' >>> str1 is str2 True >>> id(str1) 1979078421896 >>> id(str2) 1979078421896 知识点扩充: 驻留时机 所有长度为 0 和长度为 1 的

随机推荐