2016-11-05 110 views
0

我試圖提取括號內的下面一行的值。返回python中圓括號內的值

line=(panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20)) 

預期的答案是:

panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20) 

,但使用以下

pattern=re.compile(r'\((.*?)\)') 
    match = re.search(pattern, line) 

我只收到以下輸出。

(panel, wxID_EXIT, wxT("Quit") 

不幸的是,我對正則表達式的瞭解非常有限。可以有人幫助我得到預期的答案。

+0

那麼你明確要求去只對第一個')'。如果你真的不想要,爲什麼要加上'?'? –

回答

0

與那.*?,你關掉貪婪方面的正則表達式。只是刪除問號再次啓用它(默認):

pattern=re.compile(r'\((.*)\)') 

全面測試:

import re 
line='(panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20))' 
pattern=re.compile(r'\((.*)\)') 
match = re.search(pattern, line) 
print(match.group(1)=='panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20)') 

True 
+0

檢查我的編輯。這個正則表達式給出了你要求的結果。 –

+0

是啊...非常感謝:D –

0

我認爲你能避免正則表達式在這裏:

text = '''line=(panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20))''' 
parts = text.split("=") 
result = parts[1][1:-1] 
+0

它的工作。謝謝 :) –

0

你可以做:

>>> line='(panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20))' 
>>> re.search(r'^\s*\((.*)\)\s*$', line).group(1) 
'panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20)' 

或者,直Python中,你可以這樣做:

>>> line.strip()[1:-1] 
'panel, wxID_EXIT, wxT("Quit"),wxPoint(20, 20)' 

其中第一條與.strip()空白字符,然後修剪的一個字符的字符串的兩側與[1:-1]