字符串对Python中捕获的组的操作

Jay*_*shi 5 python regex

我有一个字符串:

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()是什么不起作用.
  • 如何在python中捕获的组上使用字符串操作?

Jan*_*Jan 6

你可以借助一个小功能看看发生了什么:

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函数.


Rak*_*esh 5

尝试使用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)