Regex替换为模式,但保留模式本身



我有两个字符串:

  1. [config.OPERATOR_ROLE]
  2. [config.MENEGER_ROLE]

我想把它换成

  1. {config.OPERATOR_ROLE}
  2. {config.OPERATOR_ROLE}

所以我创建了一个模式[config.*ROLE],它选择了所有的案例,但它也替换了一个图案,所以我的文本将是{config.*ROLE}。如何将部分模式排除在重新规划之外?

您仍然可以将re.subrepl参数中的捕获组一起使用:

>>> re.sub("[config.(S+)_ROLE]", r"{config.g<1>_ROLE}", "Hello [config.E_ROLE]")

收益率:

'Hello {config.E_ROLE}'

诀窍在于repl字符串中的语法g<1>

如果不想交叉匹配的],也可以使用否定字符类来排除匹配的]或空白字符。

[(config.[^s]]*)_ROLE]

模式匹配:

  • [匹配[
  • (捕获组1(在示例代码中用g<1>表示(
    • config.[^s]]*匹配config.,后跟0次以上除]或空白字符之外的任何字符
  • )关闭组1
  • _ROLE]按字面匹配

Regex演示| Python演示

示例代码

import re
pattern = r"[(config.[^s]]*)_ROLE]"
s = ("[config.OPERATOR_ROLE]n"
"[config.MENEGER_ROLE]")

result = re.sub(pattern, r"{g<1>_ROLE}", s)
if result:
print (result)

输出

{config.OPERATOR_ROLE}
{config.MENEGER_ROLE}

如果_ROLE之前的部分不允许使用下划线,并且[]之后不能有非空白字符,则可以使用更严格的模式

(?<!S)[(config.[^s_]]*)_ROLE](?!S)

Regex演示

最新更新