替换python中括号之间的文本

问题描述 投票:0回答:2

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

示例字符串:"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)

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

python regex string
2个回答
3
投票

问题是你使用括号,这在RegEx中有另一个含义。它们被用作分组字符,以捕获输出。

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

这是一个例子:

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

3
投票

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

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

\(...\)

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

In [268]: re.sub(r'\(.*?\)', '(ECE,EEE)', 'B.TECH(CS,IT)')
Out[268]: 'B.TECH(ECE,EEE)'
© www.soinside.com 2019 - 2024. All rights reserved.