Python超详细的正则表达式

article/2025/11/8 10:30:27

目录

介绍

常用的正则表达式匹配规则表格

1.match()

 .group()

常用知识点 

1.通用匹配

2.贪婪与非贪婪

 3.修饰符

4.转义匹配

2.search() 

3.findall() 

4.sub()

总结


Hello大家好我是,PYmili!今天给大家带来正则表达式的使用教程即匹配规则表格。建议收藏!

介绍

在Python中的re库就是用于正则表达式的标准库。里面包含了正则表达式的所有规则。而且学会了正则表达式,可以对爬虫有很大提升!所以,快抓紧学起来!


常用的正则表达式匹配规则表格

\w匹配字母和数字以及下划线
\W匹配不是字母和数字以及下划线的字符
\s匹配任意空白字符串,等价于 " \t \n \r \f " \S 匹配任意不是空白的字符串
\d匹配任意数字,相当于[0-9]
\D匹配任意非数字的字符
\A匹配是字符串开头
\Z匹配是字符串结尾,如果有换行,只匹配到换行前的结束字符串
\z匹配是字符串结尾,如果有换行,同时还会匹配到换行符
\G匹配最后匹配完成的位置(数字)
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串的开头
$匹配字符串的结尾
.匹配任意字符串,换行符除外
[...]表示一组字符,单独列出,比如[PYmili]
[^...]表示不在[]中的字符串,比如[^PYmili]不匹配字符串PYmili
*匹配0个或多个表达式
+匹配1个或多个表达式
?匹配0个或1个前面的表达式定义的片段,非贪婪方式
{n}匹配n个前面的表达式
{n,m}匹配n到m次由前面正则表达式的片段,贪婪方式
a|b匹配a或b
()匹配括号里的表达式

1.match()

re库中的match函数是一个常用的匹配方法。往里面写入参数就可以检测到这个字符串。

示例:

import re  # 导入正则表达式text = "PYmili is the most handsome !"  # 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('PYmili', text)  # 匹配PYmili字符串
print(r)  # 返回

结果:

<re.Match object; span=(0, 6), match='PYmili'>  span返回一个数组表示字符串个数,match返回字符串。

这时候,有个问题。这样返回很麻烦,可以直接返回字符串和数字吗?有办法!

print(r.group())  # 返回字符串
print(r.span())  # 返回数组


 .group()

.group()获取结果。我们可以通过索引的方式。获取到内容。

示例:

import re  # 导入正则表达式text = "PYmili is the most handsome !"  # 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('PYmili\s(\S+)\sthe', text)  # 匹配PYmili字符串
print(r)
print(r.group(0))  # 返回索引0位置
print(r.group(1))  # 返回索引1位置


常用知识点 

1.通用匹配

刚刚我们写的正则表达式都很繁琐!还要一个一个匹配。那我们可以直接省略里面的符号,字符串,数字。直接返回到结尾吗?当然可以!看示例:

import re  # 导入正则表达式text = "PYmili is the most handsome !"  # 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('^PYmili.*!$', text)  # 匹配PYmili字符串
print(r)
print(r.group())
print(r.span())

可以看到我们制定为: ^PYmili开头  .*用于省略所有  !$结尾 是不是很简单?


2.贪婪与非贪婪

import re  # 导入正则表达式text = "PYmili 123456789 numbers test a"  # 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('^PYmili.*(\d+).*a$', text)  # 匹配PYmili字符串
print(r)
print(r.group())
print(r.group(1))

这里获取他们之间的数字(/d+).group()输出但是,如果常理来的话应该是 123456789 但是这里只有一个 9 这是因为。.*会匹配字符\d+在.*后面了。被理解为,单独提出一个数字。那我们要怎么解决这种问题呢?很简单在前面加一个 ? 就可以了

r = re.match('^PYmili.*?(\d+).*a$', text)  # 匹配PYmili字符串
print(r)
print(r.group())
print(r.group(1))

 3.修饰符

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

re.S修饰符在网页匹配中经常用到,因为html会经常换行 。

示例:

import re  # 导入正则表达式text = """
<body><h1>标题<h1>
</body>
"""# 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('^\s.*\s$', text, re.S)
print(r)
print(r.group())

 如果没有加 re.S 就会这样

4.转义匹配

import re  # 导入正则表达式text = "(PYmili的CSDN博客)https://blog.csdn.net/qq_53280175?spm=1000.2115.3001.5343"# 要检测的字符串
print(len(text))  # 字符串个数
r = re.match('^\(PYmili的CSDN博客\).*\w$', text, re.S)
print(r)
print(r.group())

当遇见这种特殊符字符时在前面添加 \ 转义 

没添加 \ 会怎么样?

2.search() 

import rehtml = """
<body><div><img scr="http://47.108.189.192/Pymili/image/PYmili.jpg"><img scr="http://47.108.189.192/Pymili/image/R-C.jpg"></div>
</body>
"""img = re.search('<div.*?<img.*?scr="(.*?)>.*?<img.*?scr="(.*?)">.*?</div>', html, re.S)
print(img)
print(img.group())
print(img.group(1))
print(img.group(2))

与match()大致相同!


3.findall() 

import rehtml = """
<body><div><img scr="http://47.108.189.192/Pymili/image/PYmili.jpg"><img scr="http://47.108.189.192/Pymili/image/R-C.jpg"></div>
</body>
"""img = re.findall('<div.*?<img.*?scr="(.*?)>.*?<img.*?scr="(.*?)">.*?</div>', html, re.S)
print(img)
for i in img:print(i[0])print(i[1])

可以看到,findall就是返回为列表形式。使用方法与前两个相同


4.sub()

import retext = "PYmili 6661314520bug改完了吗?"msg = re.sub('\s\d+', '你', text)
print(msg)

到这里就可以看出来了吧!这个就是一个替换函数! 


总结

这里就讲解一些基本使用方法!接下来就由大家自行实践咯!好的,喜欢这篇论文的小伙伴,多多关照!可以加群共同学习:706128290 我是PYmili!下次再见!


http://chatgpt.dhexx.cn/article/8PHa2OHs.shtml

相关文章

Python正则表达式(一看就懂)

目录 哈喽O(∩_∩)O&#x1f604; 什么是正则表达式(⊙_⊙) 简单说&#xff0c;正则表达式是… 正则表达式怎么用❓ sreach的用法&#x1f34a; 匹配连续的多个数值&#x1f349; 字符""重复前面一个匹配字符一次或者多次&#x1f349; 字符"*"重复前…

Python正则表达式详解 (超详细,看完必会!)

正则表达式详解 正则表达式 英文名称叫 Regular Expression简称RegEx&#xff0c;是用来匹配字符的一种工具&#xff0c;它常被用在网页爬虫&#xff0c;文稿整理&#xff0c;数据筛选等方面&#xff0c;最常用的就是用在网页爬虫&#xff0c;数据抓取。 一、正则表达式的各种…

Python 正则表达式详解(建议收藏!)

目录 match 匹配字符串 单字符匹配 . 匹配任意一个字符 \d 匹配数字 \D 匹配非数字 \s 匹配特殊字符&#xff0c;如空白&#xff0c;空格&#xff0c;tab等 \S 匹配非空白 \w 匹配单词、字符&#xff0c;如大小写字母&#xff0c;数字&#xff0c;_ 下划线 \W 匹配非…

Android工程中方法数超过65536解决方法(Kotlin)

Android Studio报错&#xff1a; The number of method references in a .dex file cannot exceed 64K. Caused by: com.android.tools.r8.utils.AbortException: Error: Cannot fit requested classes in a single dex file (# methods: 68815 > 65536) 解决方案 build.…

postman/EOLINKER测试报错 RangeError:Port should be 0 and 65536. Received 80892.

postman/EOLINKER测试报错 RangeError&#xff1a;Port should be > 0 and < 65536. Received 80892. RangeError&#xff1a;范围错误 RangeError是当一个只超出有效范围时发生的错误。主要的有几种情况&#xff0c;第一是数组长度为负数&#xff0c;第二是Number对象…

Android Studio Cannot fit requested classes in a single dex file (# methods: 72633 > 65536)解决办法

今天在Android Studio中构建Android工程时&#xff0c;出现了这样报错&#xff1a;“Cannot fit requested classes in a single dex file (# methods: 72633 &#xff1e; 65536)” 在网上找了一圈儿&#xff0c;总结个简单快速的解决方法 问题&#xff1a; Cannot fit req…

计算机端口号65536,65536端口能不能用

楼主asdd3000(asdd) 16位计算机端口65536个,32位计算机端口是65536/2个还是65536*2个?为什么? 问题点数:10、回复次数:20 Top 1 楼EvilOctal(冰血封情) 回复于 2004-04-08 20:41:04 得分 0 这个问题我真的不太清楚. 但是 好象和位数没关系吧? 服务端口是国际组织规定的,不是…

为什么89C51单片机里面有TH0=(65536-50000)/256;TL0=(65536-50000)%256;

由于89C51的晶振频率为12MHZ&#xff0c;机器周期是1us,则每1us产生一次计数&#xff0c;例如需要进行50ms的计时&#xff0c;对机器周期进行50000计数就可以得到&#xff0c;T0可以对机器周期进行65536次计数&#xff0c;为了不让T0溢出&#xff0c;我们需要对定时器/计数器赋…

NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes

文章目录 NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes概述实验结论补充END NXP MCUXPresso - cc1plus.exe: out of memory allocating 65536 bytes 概述 在尝试迁移 openpnp - Smoothieware project 从gcc命令行 MRI调试方式 到NXP MCUXpresso工程…

65536 65535 65534

65536 65535 65534 通常在导入模型的时候会遇到65534的限制&#xff0c;比如Unity里的“Meshes may not have more than 65534 vertices or triangles at the moment”提示。开起来像是2的16次方&#xff0c;但为什么不是65536&#xff1f;65536和65535会有什么问题&#xff1…

Eclipse中65536的解决办法

最近在做项目的时候&#xff0c;发现引入的第三方工程太多&#xff0c;无法打包成app文件了。如下 遇到这种问题怎么办呢&#xff1f;&#xff1f;&#xff1f;我们先看问题描述&#xff1a;方法数不在0-65536内&#xff0c;dalvik。。错误&#xff0c;不懂&#xff0c;还是先百…

Android中65536问题剖析

问题出现的原因是因为导入融云通信的包后&#xff0c;突然提示&#xff1a; Error:The number of method references in a .dex file cannot exceed 64K. Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html。 解决办法&#xf…

数据类型

强类型语言 强类型语言是一种强制类型定义的语言&#xff0c;一旦某一个变量被定义类型&#xff0c;如果不经过强制转换&#xff0c;则它永远就是该数据类型了&#xff0c;强类型语言包括Java、.net 、Python、C等语言&#xff0c;要求变量的使用要严格符合规定&#xff0c;所有…

C语言自己写代码实现的strcmp函数

我们在面试的时候&#xff0c;经常会被笔试实现C语言系统函数&#xff0c;比如strcmp函数&#xff0c;主要考察大家的C语言功底&#xff01; #include <assert.h> #include <stdio.h>int MyStrCmp(const char* str1, const char* str2) {assert((str1 ! NULL) &a…

用指针实现strcmp函数功能

strcmp函数的原理&#xff1a; 将两个字符串&#x1f50d;&#xff08;s1&#xff0c;s2&#xff09;的元素ascii码依次比较&#xff0c;直到遇到最短字符串的‘\0’&#xff0c;返回最后一个元素ascii码比较结果。 指针实现方式&#xff1a; 通过定义两个char*指针&#x1f5…

C语言中的strcmp函数的作用是什么,c语言strcmp函数用法是什么?

c语言strcmp函数用法&#xff1a;语法结构为【int strcmp(char *str1, char *str2)】&#xff0c;比较字符串str1和str2是否相同&#xff0c;如果相同则返回0&#xff0c;如果不同&#xff0c;在不同的字符处如果str1的字符大于str2字符&#xff0c;则返回负1。 c语言strcmp函数…

strcmp函数及模拟

strcmp包含在<string.h>的头文件中&#xff0c;作用是比较两个字符串。将 C 字符串 str1 与 C 字符串 str2 进行比较。 1.strcmp函数的参数和返回值、 参数&#xff1a;是两个待比较字符串的首地址 返回值&#xff1a;此函数开始比较每个字符串的第一个字符。如果它们彼此…

自定义strcmp函数

不调用#include<string.h>实现strcmp函的功能&#xff1a; 先说一下strcmp的功能&#xff0c;是一个字符串处理函数&#xff0c;是一个用于对两组字符串进行比较的函数&#xff0c;它的返回值是int类型。 例如&#xff1a; int strcmp(char s1 , char s2) char s1[ ]…

一文吃透strcmp函数

年轻是我们唯一拥有权利去编织梦想的时光&#xff01;&#x1f493;&#x1f493;&#x1f493; 文章目录 •&#x1f319;写在前面• &#x1f34b;1.函数介绍• &#x1f330;1.1.函数接口• &#x1f330;1.2.函数分析• &#x1f330;1.3.函数的简单使用• &#x1f330;1.…

比较函数大合集:strcmp,strncmp,memcmp

前言&#xff1a; 接着奏乐接着舞&#xff0c;我们继续来看字符串函数和内存函数。今天要讲的是比较函数大合集&#xff0c;话不多说&#xff0c;开肝&#xff01;&#xff01;&#xff01; strcmp函数&#xff1a; 什么是strcmp函数&#xff1f; strcmp即string compare&#…