Python来进行查询和替换一个文本字符串?
可以使用sub()方法来进行查询和替换,sub方法的格式为:
sub(replacement, string[, count=0])
replacement是被替换成的文本
string是需要被替换的文本
count是一个可选参数,指最大被替换的数量
例子:
import re p = re.compile('(blue|white|red)') print(p.sub('colour','blue socks and red shoes')) print(p.sub('colour','blue socks and red shoes', count=1))
输出:
colour socks and colour shoes colour socks and red shoes
subn()方法执行的效果跟sub()一样,不过它会返回一个二维数组,包括替换后的新的字符串和总共替换的数量
例如:
import re p = re.compile('(blue|white|red)') print(p.subn('colour','blue socks and red shoes')) print(p.subn('colour','blue socks and red shoes', count=1))
输出
('colour socks and colour shoes', 2) ('colour socks and red shoes', 1)
补充:Python中正则表达式sub函数用法总结
正则表达式一个比较常见的用途是找到所有模式匹配的字符串并用不同的字符串来替换它们。sub方法提供一个替换值,可以是字符串或函数,和一个要被处理的字符串。
1、这里的sub方法,是被编译成‘RegexObject'实例后的实例的方法
Sub(replacement,string[,count =0 ])
1)返回的字符串是在字符串中用RE最左边不重复的匹配来替换。如果模式没有被发现,字符将没有被改变的返回。
2)可选参数count是模式匹配后替换的最大次数;count必须是非负整数。缺省值是0表示替换所有的匹配。
例子:
2、模块级函数:sub方法
注:这些函数(包括sub函数)使用RE字符串作为第一个参数,而后面的参数与相应的“RegexObject”方法的参数相同,返回要么是None,要么是一个‘MatchObject'实例。
(实际sub返回的是字符串,,两者说法不一致,以实际为准)
Re.sub的作用在于:使用给定的替换内容将匹配模式的子字符串(最左端并且非重叠的子字符串)替换掉
3、作为替换的组号
在2的例子中,只是把一个字符串用其他的内容替换掉了。用replace这个字符串方法能轻松达到同样的效果。而正则表达式允许以更灵活的方式进行搜索,同时它们也允许进行功能更强大的替换。
见证re.sub强大功能的最简单方式就是在替换字符串中使用组号。在替换内容中以‘\\n'型式出现的任何转义序列都会被模式中与组n匹配的字符串替换掉。
例如,假设要把‘*something*'用‘someting'替换掉,前者是在普通文本文档(比如Email)中进行强调的常用方法,而后者则是相应的HTML代码(用于网页)
这里把所有的* *含的字符串都替换掉了。刚开始我以为只替换*world*。记一笔。
4、作为替换的函数
Re.sub函数可以将一个函数作为第二个参数(替换式)。函数会被匹配的对象调用,并且它的返回值会被插入到文本中。(但从例子2看来,是函数的唯一参数是被匹配的对象)
例子1:
test.txt内容:
结果:
例子2
(该例子在《python基础教程》20章)
Sub方法不直接调用callback,而是返回一个新的函数,这个函数会被当成re.sub的替换函数来使用(这就是采用一个匹配的对象作为唯一参数的原因)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。