详解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 替换不完全
178 0
|
Python
Python基础——re表达式中re.sub()的用法
Python 的 re 模块提供了re.sub用于替换字符串中的匹配项。
609 0
|
SQL PHP 数据库
Python:正则re.sub实现SQL命名占位符替换
Python:正则re.sub实现SQL命名占位符替换
531 0
|
10月前
|
数据采集 机器学习/深度学习 人工智能
Python:现代编程的首选语言
Python:现代编程的首选语言
1574 102
|
10月前
|
数据采集 机器学习/深度学习 算法框架/工具
Python:现代编程的瑞士军刀
Python:现代编程的瑞士军刀
500 104
|
10月前
|
人工智能 自然语言处理 算法框架/工具
Python:现代编程的首选语言
Python:现代编程的首选语言
389 103
|
10月前
|
机器学习/深度学习 人工智能 数据挖掘
Python:现代编程的首选语言
Python:现代编程的首选语言
410 82
|
9月前
|
Python
Python编程:运算符详解
本文全面详解Python各类运算符,涵盖算术、比较、逻辑、赋值、位、身份、成员运算符及优先级规则,结合实例代码与运行结果,助你深入掌握Python运算符的使用方法与应用场景。
515 3
|
9月前
|
数据处理 Python
Python编程:类型转换与输入输出
本教程介绍Python中输入输出与类型转换的基础知识,涵盖input()和print()的使用,int()、float()等类型转换方法,并通过综合示例演示数据处理、错误处理及格式化输出,助你掌握核心编程技能。
742 3

推荐镜像

更多