Python 正则替换 re.sub

举报
林欣 发表于 2025/08/19 16:55:43 2025/08/19
【摘要】 re.sub 是 Python 正则表达式模块(re) 中的一个函数,用于 替换字符串中匹配正则表达式的部分。它的全称是 “Regular Expression Substitute”(正则表达式替换)。 re.sub 的基本语法re.sub(pattern, replacement, string, count=0, flags=0)pattern:要匹配的正则表达式(字符串或编译后的正则...

re.sub 是 Python 正则表达式模块(re 中的一个函数,用于 替换字符串中匹配正则表达式的部分。它的全称是 “Regular Expression Substitute”(正则表达式替换)。


re.sub 的基本语法

re.sub(pattern, replacement, string, count=0, flags=0)
  • pattern:要匹配的正则表达式(字符串或编译后的正则对象)。
  • replacement:替换成的字符串(可以是函数)。
  • string:要处理的原始字符串。
  • count(可选):最多替换次数(默认 0 表示全部替换)。
  • flags(可选):正则标志(如 re.IGNORECASE)。

re.sub 的作用

  1. 查找并替换:找到字符串中所有匹配 pattern 的部分,替换为 replacement
  2. 支持正则表达式:可以用复杂的正则规则匹配(如 \d+ 匹配数字,\s+ 匹配空白字符等)。
  3. 全局替换:默认替换所有匹配项(除非指定 count)。

示例

1. 简单替换

import re

text = "Hello, 2023! Python is great."
# 将所有数字替换为 "YEAR"
result = re.sub(r"\d+", "YEAR", text)
print(result)  # 输出: "Hello, YEAR! Python is great."

2. 替换换行符(\r\n\n

text = "Line1\r\nLine2\nLine3"
# 替换所有 Windows (\r\n) 和 Unix (\n) 换行符为 <br>
result = re.sub(r"\r?\n", "<br>", text)
print(result)  # 输出: "Line1<br>Line2<br>Line3"

3. 使用函数动态替换

def to_upper(match):
    return match.group(0).upper()

text = "hello world"
# 将所有单词首字母大写
result = re.sub(r"\b\w", to_upper, text)
print(result)  # 输出: "Hello World"

re.sub vs str.replace

特性 re.sub str.replace
替换方式 支持正则表达式 仅支持固定字符串
性能 稍慢(需编译正则) 更快(直接字符串操作)
灵活性 高(可匹配复杂模式) 低(只能精确匹配)
适用场景 需要模式匹配时(如换行符) 简单固定字符串替换

为什么在 Markdown 表格换行处理中推荐 re.sub

在处理换行符时:

  • \r\n(Windows)和 \n(Unix)是不同的,用 str.replace 需要写两次:
    text = text.replace("\r\n", "<br>").replace("\n", "<br>")
    
  • re.sub 可以 一步完成
    import re
    text = re.sub(r"\r?\n", "<br>", text)
    
    • \r? 表示“\r 是可选的”,因此能匹配 \r\n\n

总结

  • re.sub 是正则替换工具,适合复杂匹配(如换行符、数字、特定模式)。
  • str.replace 是简单字符串替换,适合固定文本。
  • 在 Pandas 中,可以用 str.replace(regex=True) 替代 re.sub(但底层仍是正则)。

如果你只需要处理换行符,re.sub(r"\r?\n", "<br>", text) 是最简洁高效的方式!

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。