[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 | 标志位,用于控制正则表达式的匹配方式 |

相关推荐
清水白石00818 分钟前
Free-Threaded Python 实战指南:机遇、风险与 PoC 验证方案
java·python·算法
飞Link36 分钟前
具身智能核心架构之 Python 行为树 (py_trees) 深度剖析与实战
开发语言·人工智能·python·架构
桃气媛媛1 小时前
Pycharm常用快捷键
python·pycharm
Looooking2 小时前
Python 之获取安装包所占用磁盘空间大小
python
WenGyyyL2 小时前
ColBERT论文研读——NLP(IR)里程碑之作
人工智能·python·语言模型·自然语言处理
lxy-up2 小时前
RAG--切片策略
python
ricky_fan2 小时前
(OpenAI)Codex 安装、部署使用方式
python·macos·conda·vim
小王不爱笑1322 小时前
Java 对象拷贝(浅拷贝 / 深拷贝)
java·开发语言·python
Flittly2 小时前
【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(9)Agent Teams (智能体团队)
python·agent
DevnullCoffe3 小时前
Open Claw × 跨境电商:5个最有价值的 AI Agent 应用场景深度拆解
python·api