详解Python中re.sub

简介:

re.sub的功能


re是regular expression的所写,表示正则表达式


sub是substitute的所写,表示替换;


re.sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串的replace更加强大的替换功能;


举个最简单的例子:

如果输入字符串是:       
inputStr = "hello 111 world 111"


那么你可以通过     
replacedStr = inputStr.replace("111", "222")

去换成   
"hello 222 world 222"


但是,如果输入字符串是:    
inputStr = "hello 123 world 456"


而你是想把123和456,都换成222

(以及其他还有更多的复杂的情况的时候),

那么就没法直接通过字符串的replace达到这一目的了。


就需要借助于re.sub,通过正则表达式,来实现这种相对复杂的字符串的替换:     
replacedStr = re.sub("\d+", "222", inputStr)


当然,实际情况中,会有比这个例子更加复杂的,其他各种特殊情况,就只能通过此re.sub去实现如此复杂的替换的功能了。


所以,re.sub的含义,作用,功能就是:

对于输入的一个字符串,利用正则表达式(的强大的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串

其中re.sub还支持各种参数,比如count指定要替换的个数等等。


下面就是来详细解释其各个参数的含义。

  
re.sub的各个参数的详细解释


re.sub共有五个参数。

其中三个必选参数:pattern, repl, string

两个可选参数:count, flags

  
第一个参数:pattern

pattern,表示正则中的模式字符串,这个没太多要解释的。

需要知道的是:

    反斜杠加数字(\N),则对应着匹配的组(matched group)   
        比如\6,表示匹配前面pattern中的第6个group    
        意味着,pattern中,前面肯定是存在对应的,第6个group,然后你后面也才能去引用

比如,想要处理:   
hello crifan, nihao crifan

且此处的,前后的crifan,肯定是一样的。


而想要把整个这样的字符串,换成crifanli

则就可以这样的re.sub实现替换:   

1
2
3
inputStr  =  "hello crifan, nihao crifan" ;    
replacedStr  =  re.sub(r "hello (\w+), nihao \1" "crifanli" , inputStr);    
print  "replacedStr=" ,replacedStr;  #crifanli

 

第二个参数:repl

repl,就是replacement,被替换,的字符串的意思。

repl可以是字符串,也可以是函数。

  
repl是字符串

如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理的。

即:

    \n:会被处理为对应的换行符;   
    \r:会被处理为回车符;    
    其他不能识别的转移字符,则只是被识别为普通的字符:    
        比如\j,会被处理为j这个字母本身;    
    反斜杠加g以及中括号内一个名字,即:\g<name>,对应着命了名的组,named group


接着上面的举例:

想要把对应的:   
hello crifan, nihao crifan

中的crifan提取出来,只剩:   
crifan


就可以写成:   

1
2
3
inputStr  =  "hello crifan, nihao crifan" ;    
replacedStr  =  re.sub(r "hello (\w+), nihao \1" "\g<1>" , inputStr);    
print  "replacedStr=" ,replacedStr;  #crifan

 

对应的带命名的组(named group)的版本是:   

1
2
3
inputStr  =  "hello crifan, nihao crifan" ;    
replacedStr  =  re.sub(r "hello (?P<name>\w+), nihao (?P=name)" "\g<name>" , inputStr);    
print  "replacedStr=" ,replacedStr;  #crifan

  
repl是函数

举例说明:

比如输入内容是:   
hello 123 world 456

想要把其中的数字部分,都加上111,变成:   
hello 234 world 567

那么就可以写成:     

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/usr/bin/python    
# -*- coding: utf-8 -*-
       
import  re;      
def  pythonReSubDemo():        
"""            demo Pyton re.sub        
"""        
inputStr  =  "hello 123 world 456" ;             
 
def  _add111(matched):            
intStr  =  matched.group( "number" ); 
#123            
intValue  =  int (intStr);            
addedValue  =  intValue  +  111
#234            
addedValueStr  =  str (addedValue);            
return  addedValueStr;                 
replacedStr  =  re.sub( "(?P<number>\d+)" , _add111, inputStr);        
print  "replacedStr=" ,replacedStr; 
#hello 234 world 567
 
if  __name__ = = "__main__" :       
pythonReSubDemo();

  
第三个参数:string

string,即表示要被处理,要被替换的那个string字符串。

没什么特殊要说明。

  
第四个参数:count

举例说明:

继续之前的例子,假如对于匹配到的内容,只处理其中一部分。

比如对于:   
hello 123 world 456 nihao 789

只是像要处理前面两个数字:123,456,分别给他们加111,而不处理789,

那么就可以写成:   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/usr/bin/python    
# -*- coding: utf-8 -*-      
 
import  re;      
def  pythonReSubDemo():        
"""            demo Pyton re.sub        
"""        
inputStr  =  "hello 123 world 456 nihao 789" ;   
           
def  _add111(matched):            
intStr  =  matched.group( "number" ); 
#123            
intValue  =  int (intStr);            
addedValue  =  intValue  +  111
#234            
addedValueStr  =  str (addedValue);            
return  addedValueStr; 
                 
replacedStr  =  re.sub( "(?P<number>\d+)" , _add111, inputStr,  2 );        
print  "replacedStr=" ,replacedStr; 
#hello 234 world 567 nihao 789
 
if  __name__ = = "__main__" :       
pythonReSubDemo();

  
第五个参数:flags















本文转自UltraSQL51CTO博客,原文链接: http://blog.51cto.com/ultrasql/1704885,如需转载请自行联系原作者



相关文章
|
Python
python re.sub 替换不完全
python re.sub 替换不完全
60 0
|
Python
Python基础——re表达式中re.sub()的用法
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
270 0
|
Python
Python:正则re.sub实现简易的模板引擎
Python:正则re.sub实现简易的模板引擎
113 0
|
SQL PHP 数据库
Python:正则re.sub实现SQL命名占位符替换
Python:正则re.sub实现SQL命名占位符替换
271 0
|
23天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
22天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
11天前
|
Unix Linux 程序员
[oeasy]python053_学编程为什么从hello_world_开始
视频介绍了“Hello World”程序的由来及其在编程中的重要性。从贝尔实验室诞生的Unix系统和C语言说起,讲述了“Hello World”作为经典示例的起源和流传过程。文章还探讨了C语言对其他编程语言的影响,以及它在系统编程中的地位。最后总结了“Hello World”、print、小括号和双引号等编程概念的来源。
101 80
|
29天前
|
存储 索引 Python
Python编程数据结构的深入理解
深入理解 Python 中的数据结构是提高编程能力的重要途径。通过合理选择和使用数据结构,可以提高程序的效率和质量
142 59
|
9天前
|
分布式计算 大数据 数据处理
技术评测:MaxCompute MaxFrame——阿里云自研分布式计算框架的Python编程接口
随着大数据和人工智能技术的发展,数据处理的需求日益增长。阿里云推出的MaxCompute MaxFrame(简称“MaxFrame”)是一个专为Python开发者设计的分布式计算框架,它不仅支持Python编程接口,还能直接利用MaxCompute的云原生大数据计算资源和服务。本文将通过一系列最佳实践测评,探讨MaxFrame在分布式Pandas处理以及大语言模型数据处理场景中的表现,并分析其在实际工作中的应用潜力。
41 2
|
23天前
|
小程序 开发者 Python
探索Python编程:从基础到实战
本文将引导你走进Python编程的世界,从基础语法开始,逐步深入到实战项目。我们将一起探讨如何在编程中发挥创意,解决问题,并分享一些实用的技巧和心得。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供有价值的参考。让我们一起开启Python编程的探索之旅吧!
45 10