我有一个字符串:
str1 = "abc = def"
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
str2 = "abc = #Abc#"
Run Code Online (Sandbox Code Playgroud)
我在尝试这个:
re.sub("(\w+) = (\w+)",r"\1 = %s" % ("#"+str(r"\1").title()+"#"),str1)
Run Code Online (Sandbox Code Playgroud)
但它返回:(没有完成字符串操作)
"abc = #abc#"
Run Code Online (Sandbox Code Playgroud)
.title()是什么不起作用.你可以借助一个小功能看看发生了什么:
import re
str1 = "abc = def"
def fun(m):
print("In fun(): " + m)
return m
str2 = re.sub(r"(\w+) = (\w+)",
r"\1 = %s" % ("#" + fun(r"\1") + "#"),
# ^^^^^^^^^^
str1)
Run Code Online (Sandbox Code Playgroud)
哪个收益率
In fun(): \1
Run Code Online (Sandbox Code Playgroud)
所以你基本上要做的是将\1(不是替代!)改为大写版本,显然仍然\1是字面意思.将\1被替换仅之后比您的通话将捕获的内容str.title().
使用@Rakesh提出的lambda函数.
尝试使用lambda.
例如:
import re
str1 = "abc = def"
print( re.sub("(?P<one>(\w+)) = (\w+)",lambda match: r'{0} = #{1}#'.format(match.group('one'), match.group('one').title()), str1) )
Run Code Online (Sandbox Code Playgroud)
输出:
abc = #Abc#
Run Code Online (Sandbox Code Playgroud)