python正则re.sub的使用

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

参考:python核心编程

re.sub函数的作用是:用来做字符串内容的匹配与替换

 

函数说明:re.sub(pattern, repl, string, count=0)

返回:返回替换后的内容

参数:pattern-正则匹配表达式,匹配输入字符串string中的待替换项

参数:repl-匹配到后替换为的内容串

参数: string-待替换处理的字符串

参数:count-替换的个数,缺省=0替换所有匹配项

 

关于Pattern参数的构造,是相对比较复杂的,不过如果你使用过其它语言的正则(例如c++),会发现Patten定义和其它没有什么大的区别:

例1,匹配多个字符的替换

我们知道windows中,文件名不能有这些特殊字符<>/:*?"|\,一旦出现,文件名创建时就会出错了,这时,做一个通配的替换就很有必要了:

我们知道[]中的所有字符可以作为匹配项,那么patten就可以如下这么定义:注意‘\’符号需要两次转义,当然如果使用rawstring就只会一次转义了

#把fileName中的:<>/:*?"|\替换为"_"
fileName = re.sub('[<>/:*?"|\\\\]', "_", fileName)

#使用rawstring
fileName = re.sub(r'[<>/:*?"|\\]', "_", fileName)

 

例2, 把多个相同字符换成一个的替换

有时,我们会遇到这样的内容, 空格很多-“a   b      d     e",或中间处理态出了这样的内容“a____b_c_d"

我们只想保留一个空格或下划线,这时,可以借助特殊匹配符号

*匹配0次或多次   +匹配1次或多次  ?匹配0次或1次

#replace __* to _
title = re.sub('__*', "_", title)

例3, 去除一些匹配内容

例如,去除内部的标签信息,例如  民主_CSDN  法制___123__CSDN 民生CSDN,把里面的一些字符去掉

可以借助()把匹配作为子组和特殊匹配附组合

#remove _*123_*CSDN and _*CSDN
title = re.sub('(_*123)?_*CSDN', "", title)

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)

你可能感兴趣的:(Python,Python)