替换python中括号之间的文本

时间:2017-08-14 09:39:26

标签: python regex string

我的字符串将包含()。我需要做的是更改括号之间的文本。

示例字符串:"B.TECH(CS,IT)"。 在我的字符串中,我需要将括号内的内容更改为这样的内容。B.TECH(ECE,EEE)

我试图解决此问题的方法如下..

reg = r'(()([\s\S]*?)())'
a = 'B.TECH(CS,IT)'
re.sub(reg,"(ECE,EEE)",a)

但是我得到了这样的输出..

'(ECE,EEE)B(ECE,EEE).(ECE,EEE)T(ECE,EEE)E(ECE,EEE)C(ECE,EEE)H(ECE,EEE)((ECE,EEE)C(ECE,EEE)S(ECE,EEE),(ECE,EEE)I(ECE,EEE)T(ECE,EEE))(ECE,EEE)'

有效输出应该是这样的..

B.TECH(CS,IT)

我失踪的地方以及如何正确替换文字。

2 个答案:

答案 0 :(得分:3)

问题在于您使用括号,这在RegEx中具有其他含义。它们被用作分组字符,以捕获输出。

你需要将你想要它们的()转换为文字标记。您可以使用反斜杠字符转义字符:\(

以下是一个例子:

reg = r'\([\s\S]*\)'
a = 'B.TECH(CS,IT)'
re.sub(reg, '(ECE,EEE)', a)
# == 'B.TECH(ECE,EEE)'

答案 1 :(得分:3)

你的正则表达式不起作用的原因是因为你试图匹配括号,它们被认为是正则表达式中的元字符。 ()实际上捕获了一个空字符串,并将尝试替换它。这就是你得到你看到的输出的原因。

要解决这个问题,你需要逃避那些麻烦 - 这就是

\(...\)

对于您的特定用例,我可以建议一个更简单的模式吗?

In [268]: re.sub(r'\(.*?\)', '(ECE,EEE)', 'B.TECH(CS,IT)')
Out[268]: 'B.TECH(ECE,EEE)'