python - Python 中捕获组的字符串操作

标签 python regex

我有一个字符串:

str1 = "abc = def"

我想把它转换成:

str2 = "abc = #Abc#"

我正在尝试:

re.sub("(\w+) = (\w+)",r"\1 = %s" % ("#"+str(r"\1").title()+"#"),str1)

但它返回:(没有完成字符串操作)

"abc = #abc#"
  • .title() 不工作的可能原因是什么?
  • 如何在python中对捕获的组进行字符串操作?

最佳答案

你可以在一个小函数的帮助下看到发生了什么:

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)

哪个产量

In fun(): \1

所以您基本上要做的是将 \1(不是 替代品!)更改为大写版本,显然仍然是 \1字面意思。 \1 仅在 稍后 被捕获的内容替换,而不是调用 str.title()

按照@Rakesh 的建议使用 lambda 函数。

关于python - Python 中捕获组的字符串操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50999017/

相关文章:

Javascript 通过匹配输入来过滤字符串?

python - celery block 内链

java - 我可以在 JAVA 的属性文件中使用正则表达式吗?

regex - 如何计算emacs区域中的非空白字符?

python - Flask 模型 .save() 引发 TypeError : _validate() missing 1 required positional argument: 'value'

javascript - Ace编辑器如何向后查找?

javascript - 具有双字符的字符范围的正则表达式

python - Django项目: track migrations

python - 在 Tkinter 中动态初始化文件夹中的框架

python - 这个 Python 装饰器是如何工作的?