(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)