re.sub()用法详解-程序员宅基地

技术标签: python  正则表达式  

源代码、参数及其意义:

def sub(pattern, repl, string, count=0, flags=0):
    """Return the string obtained by replacing the leftmost
    non-overlapping occurrences of the pattern in string by the
    replacement repl.  repl can be either a string or a callable;
    if a string, backslash escapes in it are processed.  If it is
    a callable, it's passed the Match object and must return
    a replacement string to be used."""
    return _compile(pattern, flags).sub(repl, string, count)

从源码中看出re.sub()函数共有5个参数:

  • pattern:表示正则中的模式字符串;
  • repl:表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;
  • string:表示要被处理(查找替换)的原始字符串;
  • count:可选参数,表示要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会替换;
  • flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。

re.sub():匹配替换为选择的文本。

1.匹配单个数字或字母

示例代码:【只匹配单一数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  只匹配单一数字
ret = re.sub(r'[0-9]', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9]', '*', s) 这句话表示只匹配单一数字,并将每一个数字替换为一个星号 。

示例代码:【只匹配单一字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  只匹配单一字母
ret = re.sub(r'[a-z]', "*", s)
print(ret)
ret = re.sub(r'[A-Z]', "*", s)
print(ret)
ret = re.sub(r'[a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[A-z]', "*", s)
print(ret)

运行结果:

  •  re.sub(r'[a-z]', '*', s) 表示只匹配单一小写字母,并将每一个小写字母替换为一个星号 。
  • re.sub(r'[A-Z]', '*', s) 表示只匹配单一大写字母,并将每一个大写字母替换为一个星号 。
  • re.sub(r'[A-Za-z]', '*', s) 这句话则表示只匹配单一字母,并将每一个字母替换为一个星号 。

示例代码:【匹配单一数字和字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配单一数字和字母
ret = re.sub(r'[0-9a-z]', "*", s)
print(ret)
ret = re.sub(r'[0-9A-Z]', "*", s)
print(ret)
ret = re.sub(r'[0-9a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[0-9A-z]', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9A-Z]', '*', s) 表示只匹配单一数字和大写字母,并将每一个数字和大写字母替换为一个星号 。
  • re.sub(r'[0-9a-z]', '*', s) 表示只匹配单一数字和小写字母,并将每一个数字和小写字母替换为一个星号 。
  • re.sub(r'[0-9A-Za-z]', '*', s) 表示只匹配单一数字和字母,并将每一个数字和字母替换为一个星号 。

2.匹配多个数字或字母

注意:这里的所说的多个指的是大于等于一个。

示例代码:【匹配多个数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个数字
ret = re.sub(r'[0-9]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9]+', '*', s) 表示匹配多个连续的数字,并将多个连续的数字替换为一个星号 。

示例代码:【匹配多个字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个字母
ret = re.sub(r'[a-z]+', "*", s)
print(ret)
ret = re.sub(r'[A-Z]+', "*", s)
print(ret)
ret = re.sub(r'[a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[a-z]+', '*', s) 表示匹配多个连续的小写字母,并将多个连续的小写字母替换为一个星号 。
  • re.sub(r'[A-Z]+', '*', s) 表示匹配多个连续的大写字母,并将多个连续的大写字母替换为一个星号 。
  • re.sub(r'[A-Za-z]+', '*', s) 表示匹配多个连续的字母,并将多个连续的字母替换为一个星号 。

示例代码:【匹配多个连续数字和字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配多个数字和字母
ret = re.sub(r'[0-9a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[0-9A-Za-z]+', '*', s) 表示匹配多个连续的数字和字母,并将多个连续的数字、连续的字母、连续的数字和字母替换为一个星号 。

3.匹配其他

示例代码:【匹配非数字】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非数字
ret = re.sub(r'[^0-9]', "*", s)
print(ret)
ret = re.sub(r'[^0-9]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^0-9]', '*', s) 表示匹配单个非数字,并将单个非数字替换为一个星号 。
  • re.sub(r'[^0-9]+', '*', s) 表示匹配多个连续的非数字,并将多个连续的非数字替换为一个星号 。

示例代码:【匹配非字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非字母
ret = re.sub(r'[^a-z]', "*", s)
print(ret)
ret = re.sub(r'[^A-Z]', "*", s)
print(ret)
ret = re.sub(r'[^a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[^a-z]+', "*", s)
print(ret)
ret = re.sub(r'[^A-Z]+', "*", s)
print(ret)
ret = re.sub(r'[^a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^a-z]', '*', s) 表示匹配单个非小写字母,并将单个非小写字母替换为一个星号 。
  • re.sub(r'[^A-Z]', '*', s) 表示匹配单个非大写字母,并将单个非大写字母替换为一个星号 。
  • re.sub(r'[^A-Za-z]', '*', s) 表示匹配单个非字母,并将单个非字母替换为一个星号 。
  • re.sub(r'[^a-z]+', '*', s) 表示匹配多个连续的非小写字母,并将多个连续的非小写字母替换为一个星号 。
  • re.sub(r'[^A-Z]+', '*', s) 表示匹配多个连续的非大写字母,并将多个连续的非大写字母替换为一个星号 。
  • re.sub(r'[^A-Za-z]+', '*', s)表示匹配多个连续的非字母,并将多个连续的非字母替换为一个星号 。

示例代码:【匹配非数字和非字母】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配非数字和非字母
ret = re.sub(r'[^0-9a-zA-Z]', "*", s)
print(ret)
ret = re.sub(r'[^0-9a-zA-Z]+', "*", s)
print(ret)

运行结果:

  • re.sub(r'[^0-9A-Za-z]', '*', s) 表示匹配单个非数字和非字母,并将单个非数字和非字母替换为一个星号 。
  • re.sub(r'[^0-9A-Za-z]+', '*', s) 表示匹配多个连续的非数字和非字母,并将多个连续的非数字和非字母替换为一个星号 。

示例代码:【匹配固定形式】【只保留字母和空格,将 repl 设置为空字符即可】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  匹配固定形式
ret = re.sub(r'[^a-z ]', " ", s)
print(ret)
ret = re.sub(r'[^a-z ]+', " ", s)
print(ret)
ret = re.sub(r'[^a-zA-Z ]', " ", s)
print(ret)
ret = re.sub(r'[^a-zA-Z ]+', " ", s)
print(ret)

运行结果:

示例代码:【去除以 @ 开头的英文单词】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  去除以 @ 开头的英文单词
ret = re.sub(r'@[a-zA-Z ]+', " ", s)
print(ret)

运行结果:

示例代码:【去除原始字符串中的URL】

import re

s = "您好,欢迎来到我的博客:https://blog.csdn.net/weixin_44799217,,,###,,,我的邮箱是:[email protected]. Today is 2021/12/21. It is a wonderful DAY!"

#  d.去除原始字符串中的URL
ret = re.sub(r'https[:.]+\S+', "", s)
print(ret)

运行结果:

示例代码:【匹配到的所有空格使用“+”来替换】

import re

s = "Long live the people's Republic of China"
ret = re.sub("\s", "+", s)
print(ret)

ret2 = re.sub("\s", "+", s, 3)  # 通过count参数控制替换的次数
print(ret2)

运行结果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44799217/article/details/115100715

智能推荐

计算机网络cmd命令验证性实验_用cmd命令测试与主机的连接是否正常-程序员宅基地

文章浏览阅读1.3k次,点赞2次,收藏5次。计算机网络-验证性试验验证性实验计算机网络-验证性试验验证性实验一、ipconfig1.实作一2.实作二二、ping1.实作一2.实作二参考资料验证性实验内容:本部分共有 8 个实验,实验 1~7 使用 Cmder 在命令行窗口完成,实验 8 使用浏览器完成。一、ipconfigipconfig 是微软操作系统的计算机上用来控制网络连接的一个命令行工具。它的主要用来显示当前网络连接的配置信息(/all 参数)。参考资料:1: https://docs.microsoft.com/_用cmd命令测试与主机的连接是否正常

使用WriteableBitmap进行截图_c#怎么从writeablebitmap中截取图片-程序员宅基地

文章浏览阅读2.6k次。一、WriteableBitmap 类提供一个可写入并可更新的 BitmapSource。 BitmapSource 是 Silverlight 图像处理管线的基本构造块,从概念上说表示具有特定大小和分辨率的单个不变的像素集。命名空间: System.Windows.Media.Imaging使用 WriteableBitmap 类基于每个框架来更新和呈现位图。 这对于生成算法内容(_c#怎么从writeablebitmap中截取图片

polya定理,求着色数,利用置换群_置换群中的着色问题-程序员宅基地

文章浏览阅读914次。  polya定理在很久以前的ICPC题目中就已经出现过,不过那个时候大家对于置换群都了解不多,因此polya定理算是很生僻的一个东西。然而人类总是飞速的进步,现在互联网上铺天盖地的题解使得polya定理走出深闺,逐渐被广大acmer所熟知。但是魔高一尺道高一丈,出题人也逐渐把polya定理的题出得越来越难做,越来越不好想,今天我就来总结一下这些颇有难度的polya定理题目(包括Burnside引..._置换群中的着色问题

你的年终奖有多少?-程序员宅基地

文章浏览阅读418次。辛苦一年,最期待的就是发年终奖了。我哥在我们老家工厂上班,过年的时候,瞄了一眼他手下那些人的年终福利,很多人都是几千几千的奖金。小云嘲笑我说,你们码农真差劲,都没有年终奖,我说,我哥他们的..._年终奖多少

c语言实现freqspace函数,滤波器程序-程序员宅基地

文章浏览阅读514次。滤波器程序Tag内容描述:1、程控滤波源代码1 功能 1 TLV1544采样程序 2 AD9851产生100 200KHz的正弦信号 按键控制正弦信号10KHz步进 LCD显示 3 AD9851产生40kHz 800kHz方波 按键控制方波信号40kHz步进控制max262的时钟 4 DAC0832转换输出控制。2、Fs 1000 t 0 1 1 Fs 0 3 A 1 B fir1 100 0 1...

ExtJs6 formpanel tagfield组件设置默认值(formpanel展现时tagfield组件列部分数据被选中)_ext tagfied-程序员宅基地

文章浏览阅读5.5k次。当我们的formpanel的某一列是tagfield的时候我们想要展现formpanel时,下拉框里的部分选项就被选中,我们该怎么做呢? 看下面代码:tagfield组建部分,为了简洁化formpanel的代码和提高组建重用性,专门把tagfield拿出来写:Ext.define('App.textfield.CaseTypesField', { extend: 'Ext.form.fi_ext tagfied

随便推点

51单片机 c语言小数计算器,求一个 89C51 简易计算器的c语言程序 只要加减乘除就行!...-程序员宅基地

文章浏览阅读160次。该楼层疑似违规已被系统折叠隐藏此楼查看此楼case 0x7b: dengyu=1; //key=11; //wei++; break; } while(temp!=0xf0) { temp=P3; temp=temp&0xf0; ..._51单片机小数减法运算

Adaptive bitrate streaming_github adaptive birate stream-程序员宅基地

文章浏览阅读2.3k次。Adaptive bitrate streamingFrom Wikipedia, the free encyclopediaAdaptive bitratestreaming is a technique usedin streaming multimedia over computer networks. While in the pastmost video stream_github adaptive birate stream

技术分享 | ClickHouse 集群分片下扩容副本的方式_clickhouse扩容-程序员宅基地

文章浏览阅读2.3k次。作者:徐耀荣爱可生南区交付服务部 DBA 团队成员,主要负责MySQL故障处理以及相关技术支持。爱好电影,游戏,旅游以及桌球。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。扩容思路internal_replication参数说明Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas).此._clickhouse扩容

聊一聊单细胞测序的PCA与TSNE降维_tsne和pca降维方法差异-程序员宅基地

文章浏览阅读4.1k次,点赞5次,收藏16次。01 PCA PCA 是最常用的降维方法,通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。说到这里,大家可能还是对PCA的作用感到有一些模糊,那么大家可以这么想,你有一堆细胞,但是你需要将这些细胞进行分群,但是你又不知道这些细胞如果进行分群的话是按照什么依据进行分群,所以你就需要先使用PCA降维找到细胞分群的主要特点这也就是我们常说的主成..._tsne和pca降维方法差异

两种姿势教你如何定制RPM包_定制属于自己的rpm包-程序员宅基地

文章浏览阅读608次。一、rpmbuild方式定制rpm包rpmbuid是用于制作rpm格式包的工具。rpm 4.4.x版本之前,rpmbuid工具默认的工作车间为/usr/src/redhat,所以造成普通用户不能制作rpm包。rpm 4.5.x版本开始,将rpmbuid工具默认的工作车间为$HOME/rpmbuild(用户家目录),并且推荐用户尽量不用root账号制作rpm包。#rpm版本查看方法:[root..._定制属于自己的rpm包

Opencv的mat转换成qimage或者qpixmap_mat转qpixmap-程序员宅基地

文章浏览阅读5.4k次,点赞4次,收藏31次。目录一、方法一二、方法二三、比较方法一优缺点方法二优缺点一、方法一本方法基本思路是把图片编码成某种格式图片的Buffer,然后QT或者OpenCV框架用该Buffer来构造出图片。cv::Mat转成QImage和QPixmapQImage matToImage(const Mat& cvImage) { vector<uchar> imgBuf; imencode(".bmp", cvImage, imgBuf); Q._mat转qpixmap