我的字符串将包含()。我需要做的是更改括号之间的文本。
示例字符串:"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)
我失踪的地方以及如何正确替换文字。
答案 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)'