我有两个字符串:
[config.OPERATOR_ROLE]
[config.MENEGER_ROLE]
我想把它换成
{config.OPERATOR_ROLE}
{config.OPERATOR_ROLE}
所以我创建了一个模式[config.*ROLE]
,它选择了所有的案例,但它也替换了一个图案,所以我的文本将是{config.*ROLE}
。如何将部分模式排除在重新规划之外?
您仍然可以将re.sub
与repl
参数中的捕获组一起使用:
>>> 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演示