【背景】
Python中的正则表达式方面的功能,很强大。
其中就包括re.sub,实现正则的替换。
功能很强大,所以导致用法稍微有点复杂。
所以当遇到稍微复杂的用法时候,就容易犯错。
所以此处,总结一下,在使用re.sub的时候,需要注意的一些事情。
在解释具体的注意事项之前,先把其具体的解释贴出来:
1 re.sub的功能
re是regular expression的缩写,表示正则表达式
sub是substitute的缩写,表示替换;
re。sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串的replace更加强大的替换功能:
举个最简单的例子:
如果输入字符串是:
inputStr = 'hello 111 world 111'
那么你可以通过
replaceStr = inputStr.replace('111', '222')
去换成
'hello 222 world 222'
但是,如果输入字符串是:
inputStr = 'hello 123 world 456'
而你想把123和456,都换成222
(以及其他还有更多的复杂情况的时候),
那么就没法直接通过字符串的replace达到这一目的了。
就需要将借助于re.sub,通过正则表达式,来实现这种相对复杂的字符串的替换:
replaceStr = re.sub('\d+', '222', inputStr)
当然,实际情况中,会有比这个例子更加复杂的,其他各种特殊情况,就只能通过此re.sub去实现如此复杂的替换功能了。
所以,re.sub的含义,作用,功能就是:
对于输入的一个字符串,利用正则表达式的强大的字符串处理功能,去实现相对复杂的字符串替换处理,然后返回被替换后的字符串。
其中re.sub还支持各种参数,比如count制定要替换的个数等等。
下面就是来详细解释各个参数的含义。
2 re.sub的各个参数的详细解释
re.sub共有五个参数。
其中三个必选参数:pattern,repl,string
两个可选参数:count,flags
2.1 第一个参数:pattern
pattern,表示正则中的模式字符串,这个没太多要解释的。
需要知道的是:
反斜杠加数字(\N),则对应着匹配的组(matched group)
比如\6,表示匹配前面patter中的第6个group
意味着,pattern中,前面肯定是存在对应的,第6个group,然后你后面也才能去引用
比如,想要处理:
Hello crifan, nihao crifan
且此处的前后crifan是一样的。
而想要把前面的字符串crifan,韩城crifanli
就可以用这样的re.sub实现替换:
inputStr = 'hello crifan, nihao crifan'
replaceStr = re.sub(r"hello (\w+), nihao \1', crifanli', inputStr)
print "replaceStr =", replaceStr