2015-12-30 32 views
0

我有以下笨重代碼從字符串「ABC(XYZ)」Python的正則表達式來提取括號

import re 

test_str = 'ABC(XYZ)' 
partone = re.sub(r'\([^)]*\)', '', test_str) 
parttwo_temp = re.match('.*\((.+)\)', test_str) 
parttwo = '(' + parttwo_temp.group(1) + ')' 

如果有人能夠我想知道解壓出來「ABC」和「(XYZ)」想一個更好的正則表達式來分割字符串。謝謝。

+1

'[我爲我在re.split(r'[()]',test_str)如果我]' –

+0

@AvinashRaj實際上不會工作;它會給出ABC''XYZ',期望的結果是'ABC''(XYZ)'。 –

回答

1

您可以使用re.findall

>>> import re 
>>> test_str = 'ABC(XYZ)' 
>>> re.findall(r'\([^()]*\)|[^()]+', test_str) 
['ABC', '(XYZ)'] 
>>> [i for i in re.findall(r'(.*)(\([^()]*\))', test_str)[0]] 
['ABC', '(XYZ)'] 
+0

謝謝!這是最一般的解決方案。 –

0
[i for i in re.split(r'(.*?)(\(.*?\))', test_str) if i] 
0

對於這種類型的輸入數據,我們可以更換(與空間+ (和空間分割:

>>> s = 'ABC(XYZ)' 
>>> s.replace("(", " (").split() 
['ABC', '(XYZ)'] 

這樣,我們在每個左括號前人爲地創建一個分隔符