2017-08-14 99 views
0

我的字符串中將包含()。我需要做的是改變括號內的文字。替換Python中的()之間的文本

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

我在哪裏丟失以及如何正確替換文本。

+3

嘗試轉義()你想要他們作爲文字標記。例如:'\(([\ s \ S] *)\)'。 '('和')'是分組字符,所以你需要明確地說它們的意思是字面標記而不是正則表達式操作符。 – rubenwardy

+2

您是否嘗試過regex101.com或其他人?它會顯示你的執行結果,並「解釋」你的正則魔法。你應該逃避你的()字符,所以它會從組中告訴它 – sudo97

回答

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)'