[Python进阶] Python中使用正则表达式

8.4 Python中使用正则表达式

在Python中,我们使用re模块来使用正则表达式。以下是一些基本的使用方法:

首先,你需要导入re模块:

import re

8.4.2 re模块简单示例

8.4.2.1 查找字符串

使用re模块的search()方法可以在一个字符串中查找匹配正则表达式的部分。例如,下面的代码将查找字符串中的"abc":

py 复制代码
import re  
  
string = "Hello, abc world!"  
match = re.search("abc", string)  
  
if match:  
    print("Found match: ", match.group())  
else:  
    print("No match found.")

Found match: abc

8.4.2.2 匹配字符串

如果你想检查一个字符串是否完全符合一个正则表达式,你可以使用match()方法。例如,下面的代码将检查字符串是否以"abc"开头:

py 复制代码
import re  
  
string = "abc world!"  
match = re.match("abc", string)  
  
if match:  
    print("Match found: ", match.group())  
else:  
print("No match found.")

Match found: abc

注意,match()方法只检查字符串的开始部分是否符合正则表达式,如果你想检查整个字符串是否符合,你应该使用fullmatch()方法。

8.4.2.3 替换字符串

如果你想在字符串中查找并替换匹配正则表达式的部分,你可以使用sub()方法。例如,下面的代码将在字符串中查找所有的"abc"并替换为"xyz":

py 复制代码
import re  
  
string = "Hello, abc world! abc"  
new_string = re.sub("abc", "xyz", string)  
print(new_string)

Hello, xyz world! xyz

以上就是Python中使用正则表达式查找和匹配字符串的基本方法。

8.4.3 re模块函数详解

8.4.3.1 re.match:从头查找

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:

re.match(pattern, string, flags=0)
参数说明:

| 参数 | 描述 |

|---------|--------------------|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串 |

| flags | 标志位,用于控制正则表达式的匹配方式 |
标志位:

| 修饰符 | 描述 |

|---|---|

| re.I | 使匹配对大小写不敏感 |

| re.L | 做本地化识别(locale-aware)匹配 |

| re.M | 多行匹配,影响 ^ 和 $ |

| re.S | 使 . 匹配包括换行在内的所有字符 |

| re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |

| re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配结果对象方法

匹配对象方法 描述
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
span() 返回匹配结果所在的位置
8.4.3.2 re.search:查找全部

re.search 扫描整个字符串并返回第一个成功的匹配。
函数语法:

re.search(pattern, string, flags=0)
参数说明:

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

匹配成功re.search方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

8.4.3.3 re.sub:检索并替换

语法:

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

| 参数名 | 说明 |

|---|---|

| pattern | 正则中的模式字符串。 |

| repl | 替换的字符串,也可为一个函数。 |

| string | 要被查找替换的原始字符串。 |

| count | 模式匹配后替换的最大次数,默认0表示替换所有的匹配。 |

| flags | 编译时用的匹配模式,数字形式。 |

8.4.3.4 re.findall

在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。

注意: match 和 search 是匹配一次 findall 匹配所有。
语法:

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

pattern.findall(string, pos\[, endpos])
参数:

| 参数名 | 说明 |

|---|---|

| pattern | 匹配模式。 |

| string | 待匹配的字符串。 |

| pos | 可选参数,指定字符串的起始位置,默认为0。 |

| endpos | 可选参数,指定字符串的结束位置,默认为字符串的长度。 |

8.4.3.5 re.finditer

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。
语法:

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

**`参数:

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

8.4.3.6 re.split

split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下:

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

| 参数 | 描述 |

|---|---|

| pattern | 匹配的正则表达式 |

| string | 要匹配的字符串。 |

| maxsplit | 分割次数,maxsplit=1 分割一次,默认为 0,不限制次数。 |

| flags | 标志位,用于控制正则表达式的匹配方式 |

相关推荐
小刘在重生~1 小时前
Java常用类|String类详解 + BigDecimal精准计算(含面试题)
java·开发语言·python
大汉堡玩测试2 小时前
langfuse测试实战(一): 配置一个简单的项目快速落地
python·测试工具
一位正在转型AI全栈的前端工程师2 小时前
AI 全栈学习之旅 -Week 8:从单 Agent 到多 Agent 协作:LangGraph 实战与记忆持久化
前端·python
长江后浪博客2 小时前
Python + YOLOv8 疲劳驾驶 AI 视觉检测入门:从模型训练到 ONNX 实时摄像头检测完整实战
人工智能·python·yolo·疲劳驾驶检测·onnx·yolov8
hhzz2 小时前
【OpenCV 入门到精通 01】认识 OpenCV 与计算机视觉:从零建立全局认知
人工智能·python·opencv·计算机视觉·开源
一马平川的大草原3 小时前
如何实现SVG转Mermaid图
python·svg·格式转换·mermaid
PFFstronger3 小时前
基于 Dify 知识库 + Ollama 大模型,自动生成测试用例并导出 XMind 的完整方案
人工智能·python·测试用例·xmind
SomeBottle3 小时前
【小记】图片托管从又拍云迁移到腾讯云 EO + COS(兼容图片处理参数)
python·计算机网络·学习笔记·对象存储·cdn·折腾
cts6184 小时前
FDE架构师前端选型指南
python
2601_962293795 小时前
【Python教程:自动化处理文件】
python·自动化·编程·文件处理·os模块