2015-12-30 56 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)'] 

这样,我们在每个左括号前人为地创建一个分隔符