首页 > 解决方案 > 在字符串中有 ( ) 如何 re.sub 到 \( \)

问题描述

我想 re.sub 有的 'abc(abc)abc' 字符串'abc\(abc\)abc'

string = 'abc(abc)abc 
sub_l_string = re.sub(r'\(','\(',string) 
sub_r_string = re.sub(r'\)','\)',sub_l_string) 
pp(sub_r_string)

它应该打印'abc\(abc\)abc',但是它打印 'abc\\(abc\\)abc'

谁能帮忙?谢谢!

标签: python-3.xregexescaping

解决方案


一个选项可以是使用模式进行单个替换,从左括号匹配并断言右括号,并在完全匹配之前和之后的替换中添加反斜杠\g<0>

import re

regex = r"\([^()]*(?=\))"
s = "abc(abc)abc"
result = re.sub(regex, r"\\\g<0>\\", s)

if result:
    print (result)

查看Python 演示


或与捕获组g<1>

import re

regex = r"(\([^()]*)\)"
s = "abc(abc)abc"
result = re.sub(regex, r"\\\g<1>\\)", s)

if result:
    print (result)

查看Python 演示

输出

abc\(abc\)abc

推荐阅读