Python正则表达式语法快速入门

article/2025/11/8 10:36:37

文章目录

  • 1 正则符号初阶
    • 代码举例1:不同符号的组合
    • 代码举例2:符号加`+`,代表连续的一个或多个
    • 代码举例3:匹配字符串开始
    • 代码举例4:匹配字符串结束
    • 代码举例5:匹配单词边界
  • 2 正则符号进阶
    • 代码举例1:匹配a或b
    • 代码举例2:中括号的使用
    • 代码举例3:大括号
    • 代码举例4:小括号
    • 代码举例5:问号

1 正则符号初阶

正则表达式需要与相关函数共同使用,对函数的学习可以参考:
Python正则表达式所有函数详解
首先看一下正则表达式中的常用符号
在这里插入图片描述

代码举例1:不同符号的组合

rs = r'\D\d'
s ='123dws8f833vbalc8d77'
res = re.findall(rs,s)
print(res)

以上代码寻找的是一个非数字搭配一个数字的字符串,输出结果为:
在这里插入图片描述

代码举例2:符号加+,代表连续的一个或多个

rs = r'\w+'
s ='12 3dws8#f833vb(alc8)d77'
res = re.findall(rs,s)
print(res)

以上代码寻找的是一个或多个字母数字下划线的字符串,输出结果为:
在这里插入图片描述

代码举例3:匹配字符串开始

使用\A可以只从开始进行字符串的匹配,注意只能放在最左边,如果字符串开头无法匹配上,则直接返回空值:

rs1 = r'\A\d'
rs2 = r'\A\d+'
rs3 = r'\A\D+'
s ='12 3dws8#f833vb(alc8)d77'
res1 = re.findall(rs1,s)
res2 = re.findall(rs2,s)
res3 = re.findall(rs3,s)
print(res1, res2, res3)

以上代码的输出结果为:
在这里插入图片描述

代码举例4:匹配字符串结束

与\A同理,\Z可以匹配字符串结束,必须放在正则表达式的最右侧,即便是换行符等转义字符,也不能放在\Z的右侧。

rs1 = r'\d\Z'
rs2 = r'\d+\Z'
rs3 = r'\D+\Z'
s ='12 3dws8#f833vb(alc8)d77'
res1 = re.findall(rs1,s)
res2 = re.findall(rs2,s)
res3 = re.findall(rs3,s)
print(res1, res2, res3)

在这里插入图片描述

代码举例5:匹配单词边界

使用\b匹配单词边界,字母数字下划线以外的字符或转义符,可以被认为是单词边界

rs1 = r'\d+\b'
s ='12 3dws8#f833vb(alc8)d77'
res1 = re.findall(rs1,s)
print(res1)

在这里插入图片描述

2 正则符号进阶

在这里插入图片描述
在这里插入图片描述

前两项的匹配开头与末尾,和\A\Z作用相同,不再重复提供示例代码

代码举例1:匹配a或b

rs = 'a|b'
s = 'ac123bc456'
print(re.findall(rs,s))

运行结果:[‘a’, ‘b’]

代码举例2:中括号的使用

中括号中任意一个字符匹配即可,需要注意的是,中括号中允许使用\d这类表达,但是不能使用\d+这类表达,因为会被看作\d+

rs = '[ab]c'
s = 'ac123bc456'
print(re.findall(rs,s))

输出是:[‘ac’, ‘bc’]

rs = '[3-9]' #表示3-9的任意字符
s = 'ac123bc456'
print(re.findall(rs,s))

输出是:[‘3’, ‘4’, ‘5’, ‘6’]
中括号中数字和字母可以同时使用,如[0-9A-Z],中间不含逗号;[\u4E00-\u9fa5]可以匹配所有汉字;

代码举例3:大括号

通常与其他语法联用,表示前面的字符重复出现几次。{3}表示重复出现3次,{3,7}表示重复出现3至7次,{3,}表示重复出现三次以上。

rs1 = r'[a-z]{2}'
s ='12 3dws8#f833vb(alc8)d77'
res1 = re.findall(rs1,s)
print(res1)

这将输出连续的连个小写字母类型的字符串,输出结果为:[‘dw’, ‘vb’, ‘al’]
如果使用{3,}这类语法,还可考虑和联用。当不存在时,为贪婪模式,匹配出的单个字符串将尽可能地长,具体差别通过代码会更加清晰:

rs1 = r'[a-z]{2,}'
rs2 = r'[a-z]{2,}?'s ='12 3dws8#f833vbvd(alc8)d77'
res1 = re.findall(rs1,s)
res2 = re.findall(rs2,s)
print(res1,res2)

在这里插入图片描述

代码举例4:小括号

小括号的主要功能包括组合、捕获和分组。
1.组合功能

rs = r'(\d[a-z]){3}' #组合
s = '1a2b3c44'
print(re.fullmatch(rs,s))

上面的代码使用了小括号的组合功能,通过与大括号的结合,将小括号中的内容重复了3次,将会输出1a2b3c
2.捕获功能

url = 'http://www.baidu.com/abcdefg' # 捕获
rs = r'http://(.*?)/'  # .代表任意字符,*代表出现任意次(包括0次),?代表非贪婪模式
print(re.findall(rs,url))

上面的代码使用了小括号的捕获功能,捕获的是介于http:///之间的字符。这段代码的输出是:www.baidu.com 该功能通常与findall函数联用,与其他函数联用时,其可能不再具有捕获的含义
3.分组功能
在Python正则表达式中,小括号与反斜杠的组合可以用于创建分组,以实现对子表达式的分组匹配或分组替换。具体来说,小括号用于指定一个子表达式,而反斜杠后面跟着小括号的数字可以用于引用已定义的子表达式。

(\d{3})-(\d{3}-\d{4})

这个正则表达式将匹配格式为“xxx-xxx-xxxx”的电话号码。其中,小括号将整个正则表达式分成两个子表达式,分别匹配三个数字和“-”符号以及七个数字。你可以在正则表达式中使用\1和\2引用这两个子表达式,以便在后续的匹配或替换中使用它们。

例如,以下代码将使用re.sub函数将匹配的电话号码格式更改为“xxx.xxx-xxxx”:

import rephone_num = "555-555-1234"
new_phone_num = re.sub(r"(\d{3})-(\d{3}-\d{4})", r"\1.\2", phone_num)
print(new_phone_num)

输出为:555.555-1234

代码举例5:问号

在Python正则表达式中,问号(?)的含义有两种:

  1. 表示非贪婪模式:在量词(例如 ,+ 等)后面加上问号表示量词的非贪婪模式,它匹配的内容尽可能少。例如:a.?b 匹配的是最短的 a 和 b 中间的内容,而不是最长的。
  2. 表示 0 个或 1 个:单独使用问号表示该字符出现 0 次或 1 次。例如:a?b 可以匹配 ab 和 b,但不能匹配 aab。
import retext = 'aabbcc'# 非贪婪模式
print(re.findall('a.*?b', text)) # 输出 ['ab', 'ab']# 0 个或 1 个
print(re.findall('a?b', text)) # 输出 ['b', 'ab', 'b', 'ab']

这里有一种有意思的代码就是连续出现了两次问好,比如:

import retext = 'aabbcc'print(re.findall('a??b', text)) # 输出 ['b', 'b']

在这个例子中,两个问号连续匹配的是 a 出现 0 次或 1 次,因此只有 b 被匹配了。


http://chatgpt.dhexx.cn/article/0QwGQvQ9.shtml

相关文章

python正则表达式入门

🙊今天我们来学习python的正则表达式的部分,先说下为什么要学习这一部分呢,当然是因为正则表达式处理文本类型的数据实在是太方便了。为以后进入nlp领域打打基础! 先给大家推荐一个网站: 用于正则表达式验证. 大致就长这个样子。…

python使用正则表达式

一、使用正则表达式步骤 1、寻找规律; 2、使用正则符号表示规律; 3、提取信息,如果每一个字符都能匹配,则匹配成功;一旦有匹配不成功的字符则匹配失败。 二、正则表达式中常见的基本符号 1.点号“.”一…

Python 正则表达式

1.正则表达式的定义: 正则表达式是对字符串进行解析(获取一大串字符串信息中,你想要的部分)。 正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。 正则表达式,又成正规表示式,正规…

python正则表达式详解

正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能不一样…

详解Python正则表达式(含丰富案例)

前言:正则表达式在网络爬虫、数据分析中有着广泛使用,掌握正则表达式能够达到事半功倍的效果。本文详细介绍正则表达式中各种规则及其符号含义,并结合Python中的Re库进行演示,由浅入深,即学即练即用,内容丰…

Python超详细的正则表达式

目录 介绍 常用的正则表达式匹配规则表格 1.match() .group() 常用知识点 1.通用匹配 2.贪婪与非贪婪 3.修饰符 4.转义匹配 2.search() 3.findall() 4.sub() 总结 Hello大家好我是,PYmili!今天给大家带来正则表达式的使用教程即匹配规则表格…

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

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

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

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

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

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

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

Android Studio报错: 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…