详解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,如需转载请自行联系原作者



相关文章
|
12月前
|
Python
python re.sub 替换不完全
python re.sub 替换不完全
53 0
|
Python
Python基础——re表达式中re.sub()的用法
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
234 0
|
Python
Python:正则re.sub实现简易的模板引擎
Python:正则re.sub实现简易的模板引擎
110 0
|
SQL PHP 数据库
Python:正则re.sub实现SQL命名占位符替换
Python:正则re.sub实现SQL命名占位符替换
261 0
|
11天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
2天前
|
Python
不容错过!Python中图的精妙表示与高效遍历策略,提升你的编程艺术感
本文介绍了Python中图的表示方法及遍历策略。图可通过邻接表或邻接矩阵表示,前者节省空间适合稀疏图,后者便于检查连接但占用更多空间。文章详细展示了邻接表和邻接矩阵的实现,并讲解了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历方法,帮助读者掌握图的基本操作和应用技巧。
13 4
|
2天前
|
设计模式 程序员 数据处理
编程之旅:探索Python中的装饰器
【10月更文挑战第34天】在编程的海洋中,Python这艘航船以其简洁优雅著称。其中,装饰器作为一项高级特性,如同船上的风帆,让代码更加灵活和强大。本文将带你领略装饰器的奥秘,从基础概念到实际应用,一起感受编程之美。
|
4天前
|
存储 人工智能 数据挖掘
从零起步,揭秘Python编程如何带你从新手村迈向高手殿堂
【10月更文挑战第32天】Python,诞生于1991年的高级编程语言,以其简洁明了的语法成为众多程序员的入门首选。从基础的变量类型、控制流到列表、字典等数据结构,再到函数定义与调用及面向对象编程,Python提供了丰富的功能和强大的库支持,适用于Web开发、数据分析、人工智能等多个领域。学习Python不仅是掌握一门语言,更是加入一个充满活力的技术社区,开启探索未知世界的旅程。
14 5
|
2天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
10 1
|
2天前
|
算法 Python
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果
在Python编程中,分治法、贪心算法和动态规划是三种重要的算法。分治法通过将大问题分解为小问题,递归解决后合并结果;贪心算法在每一步选择局部最优解,追求全局最优;动态规划通过保存子问题的解,避免重复计算,确保全局最优。这三种算法各具特色,适用于不同类型的问题,合理选择能显著提升编程效率。
16 2
下一篇
无影云桌面