python关于sub用法的理解
小编最近在看re.sub时突然有点懵,特意查了一下资料,特来记录一下。小编在查找资料的时候,发现大家都是转自同一片文章,初学的我不太懂其中的一个函数调用,所以特写此文章来分享一下。
首先,还是简单介绍一下sub的用法。
re.sub共有五个参数。
re.sub(pattern, repl, string, count=0, flags=0)
其中三个必选参数:pattern, repl, string
两个可选参数:count, flags
第二个参数:repl
repl,就是replacement,被替换,的字符串的意思。
repl可以是字符串,也可以是函数。
repl是字符串
如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理的。
即:
\n:会被处理为对应的换行符;
\r:会被处理为回车符;
其他不能识别的转移字符,则只是被识别为普通的字符:
比如\j,会被处理为j这个字母本身;
反斜杠加g以及中括号内一个名字,即:\g,对应着命了名的组,named group
接着上面的举例:
想要把对应的:
hello crifan, nihao crifan
1
中的crifan提取出来,只剩:
crifan
就可以写成:
inputStr = “hello crifan, nihao crifan”;
replacedStr = re.sub(r"hello (\w+), nihao \1", “\g<1>”, inputStr);
print “replacedStr=”,replacedStr; #crifan
所以运用\g之后代码就可以写成:
inputStr = "hello crifan, nihao crifan"
replacedStr = re.sub(r"hello (\w+), nihao \1", "\g<1>", inputStr)
print "replacedStr=",replacedStr#crifan
下面就是我疑惑的地方:
小编不懂,_add111的运行顺序。
def pythonReSubDemo():
"""
demo Pyton re.sub
"""
inputStr = "hello 123 world 456"
def _add111(matched):
intStr = matched.group("number") #123
intValue = int(intStr)
addedValue = intValue + 111 #234
addedValueStr = str(addedValue)
return addedValueStr
replacedStr = re.sub("(?P<number>\d+)", _add111, inputStr)
print ("replacedStr=",replacedStr) #hello 234 world 567
###############################################################################
pythonReSubDemo()
小编呢,有查找了一下关于函数嵌套调用的概念:
一、不带括号时,调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
二、带括号(参数或者无参),调用的是函数的执行结果,须等该函数执行完成的结果
我先输出matched的时候报错了
我在调用了matched.group()之后,输出matched,输出的就是正确返回的match类型的返回值了。
在函数调用的时候,replacedStr = re.sub("(?P\d+)", _add111, inputStr) 传入进去的确实_add111函数体,并没有指明函数的传入参数。
有点疑惑?????????