我无法弄清楚为什么以下两个印刷语句会有所不同 结果。请问任何人请解释一下吗?我只是举一个小例子。第一个print语句表中的表被替换为特殊字符,第二个表示正确的字符。
import re
def tblcnv( str ):
rtval = re.sub("table", "chair", str)
return rtval
rval = "<table is in the place where you sit daily "
tblcnt = re.sub(r"<(table.*place)", tblcnv('\1'), rval)
print tblcnt
print tblcnv("<table is in the place where you sit daily")
答案 0 :(得分:2)
这一行:
tblcnt = re.sub(r"<(table.*place)", tblcnv('\1'), rval)
可能不会做你认为应该做的事情。对tblcnv('\1')
的调用会返回'\ 1',这是您看到的笑脸,然后用所述笑脸替换字符串的第一个块。
答案 1 :(得分:2)
定义tblcnt时,你传递的是tblcnv('\ 1')。 '\ 1'是包含值为0x01的单个字节的字符串。所以tblcnv的结果是相同的字符串。
答案 2 :(得分:1)
根据re.sub手册,它需要一个“为模式的每个非重叠事件调用”的函数。由于这些事件实际上是匹配对象,因此您最好使用简单的lambda表达式,该表达式提取匹配对象的group(1)
并将其传递给tblcnv
函数。
import re
def tblcnv( str ):
rtval = re.sub("table", "chair", str)
return rtval
rval = "<table is in the place where you sit daily "
tblcnt = re.sub(r"<(table.*place)", lambda m: tblcnv(m.group(1)), rval)
print tblcnt
print tblcnv("<table is in the place where you sit daily")