我的字符串将包含()。我需要做的是更改括号之间的文本。
示例字符串:"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)
我失踪的地方以及如何正确替换文本。
问题是你使用括号,这在RegEx中有另一个含义。它们被用作分组字符,以捕获输出。
你需要将你想要它们的()转换为文字标记。您可以使用反斜杠字符转义字符:\(
。
这是一个例子:
reg = r'\([\s\S]*\)'
a = 'B.TECH(CS,IT)'
re.sub(reg, '(ECE,EEE)', a)
# == 'B.TECH(ECE,EEE)'
你的正则表达式不起作用的原因是因为你试图匹配括号,它们被认为是正则表达式中的元字符。 ()
实际上捕获一个空字符串,并将尝试替换它。这就是你得到你看到的输出的原因。
要解决这个问题,你需要逃避这些问题 - 这就像是
\(...\)
对于您的特定用例,我可以建议一个更简单的模式吗?
In [268]: re.sub(r'\(.*?\)', '(ECE,EEE)', 'B.TECH(CS,IT)')
Out[268]: 'B.TECH(ECE,EEE)'