1.Python re.sub
【背景】Python中的正则表达式方面的功能,很强大。
其中就包括re.sub,实现正则的替换。功能很强大,所以导致用法稍微有点复杂。
所以当遇到稍微复杂的用法时候,就容易犯错。所以此处,总结一下,在使用re.sub的时候,需要注意的一些事情。
解释具体的注意事项之前,先把其具体的解释贴出来:re.subre.sub(pattern, repl, string, count=0, flags=0)Return the string obtained by replacing the leftmost non-overlapping occurrences of pattern in string by the replacement repl. If the pattern isn't found, string is returned unchanged. repl can be a string or a function; if it is a string, any backslash escapes in it are processed. That is, \n is converted to a single newline character, \r is converted to a carriage return, and so forth. Unknown escapes such as \j are left alone. Backreferences, such as \6, are replaced with the substring matched by group 6 in the pattern. For example:>>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',。 r'static PyObject*\npy_\1(void)\n{',。
'def myfunc():')'static PyObject*\npy_myfunc(void)\n{'If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string. For example:>>> def dashrepl(matchobj):。 if matchobj.group(0) == '-': return ' '。
else: return '-'>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')'pro--gram files'>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)'Baked Beans & Spam'The pattern may be a string or an RE object.The optional argument count is the maximum number of pattern occurrences to be replaced; count must be a non-negative integer. If omitted or zero, all occurrences will be replaced. Empty matches for the pattern are replaced only when not adjacent to a previous match, so sub('x*', '-', 'abc') returns '-a-b-c-'.In addition to character escapes and backreferences as described above, \g
就需要借助于re.sub,通过正则表达式,来实现这种相对复杂的字符串的替换:?1replacedStr = re.sub("\d+", "222", inputStr)当然,实际情况中,会有比这个例子更加复杂的,其他各种特殊情况,就只能通过此re.sub去实现如此复杂的替换的功能了。所以,re.sub的含义,作用,功能就是:对于输入的一个字符串,利用正则表达式(的强大的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串其中re.sub还支持各种参数,比如count指定要替换的个数等等。
下面就是来详细解释其各个参数的含义。re.sub的各个参数的详细解释re.sub共有五个参数。
其中三个必选参数:pattern, repl, string两个可选参数:count, flags第一个参数:patternpattern,表示正则中的模式字符串,这个没太多要解释的。需要知道的是:反斜杠加数字(\N),则对应着匹配的组(matched group)比如\6,表示匹配前面pattern中的第6个group意味着,pattern中,前面肯定是存在对应的,第6个group,然后你后面也才能去引用比如,想要处理:hello crifan, nihao crifan 且此处的,前后的crifan,肯定是一样的。
而想要把整个这样的字符串,换成crifanli则就可以这样的re.sub实现替换:?123inputStr = "hello crifan, nihao crifan";replacedStr = re.sub(r"hello (\w+), nihao \1", "crifanli", inputStr);print "replacedStr=",replacedStr; #crifanli第二个参数:replrepl,就是replacement,被替换,的字符串的意思。repl可以是字符串,也可以是函数。
repl是字符串如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理的。即:\n:会被处理为对应的换行符;\r:会被处理为回车符;其他不能识别的转移字符,则只是被识别为普通的字符:比如\j,会被处理为j这个字母本身;反斜杠加g以及中括号内一个名字,。
2.Python 的sub和replace的区别
sub出现于re库,用法是re.sub(pattern, repl, string, count=0, flags=0)
实例,re.sub(r'e','a','def',count = 1)
>>> daf
相对于replace来说,该方法功能更强,但是运行效率更低。
replace是自带函数,用法是str.replace(old, new[, max])
实例,'abbc'.replace('b','a',1)
>>>aabc
对比re.sub来说,replace没有正则的效果,但是运行效率更佳。请在实际应用中根据需求来定制使用方法,不要浪费资源。
3.python 正则表达式re.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*'用'<em>someting</em>;'替换掉,前者是在普通文本文档(比如Email)中进行强调的常用方法,而后者则是相应的HTML代码(用于网页)
这里把所有的* *含的字符串都替换掉了。刚开始我以为只替换*world*。记一笔。
4.python 中 re.sub 和 re.compile 是啥意思呀
在python中re是一个常用的模块,主要是通过正则表达式进行字符串处理。它的速度相对自己用 find, replace, split来说,通常更快。当然功能更强大。
正则表达式也是一种语言,所以如果通过re.compile把它编译成对象,会速度快很多。所以我们经常看到这样的语句
exp = re.compile("\S+")
m = exp.search(bigtext)
print m.group(0)这段话等同于
m = re.search("\S+", bigtext)
print m.group(0)
re.sub则相当于字符串操作中的replace,比如
sometext = re.sub("(?isu)\r\n", "\n", sometext)上面这句话是将回车换行,变成换行。这是为了将windows下的文本文件移到linux下,防止某些软件不兼容所做的处理。
简单的说re.sub是做字符串替换的, re.compile是将正则表达式编译成一个对象,加快速度,并重复使用。
转载请注明出处编程代码网 » pythonre.subr(Pythonre.sub)