2015-11-10 49 views
1

我試圖解析字符串中的所有支架用下面的命令:如何正確解析右括號

\((.+)\) 

,但不知道我應該如何爲下一個字符串改寫了命令:

(您總得)鬥爭爲您權利(甲方)

我想提取兩個(你總得)(甲方)

+3

請澄清一下:你是否希望能夠匹配這兩個集合,而不是隻匹配整個字符串的匹配? –

+0

'解析關閉圓括號' - 只要你提到_closing_,你就有問題。這需要_open_。這些並非真空存在,需要均衡的文字。 python可以遞歸嗎? – sln

回答

4

你需要一個否定的字符類,而不是.+然後用re.findall()

>>> s="(You Gotta) Fight For Your Right (to Party)" 
>>> 
>>> import re 
>>> re.findall(r'\(([^()]+)\)',s) 
['You Gotta', 'to Party'] 

需要注意的是,在這裏你的正則表達式匹配的開括號和右括號之間的每一件事情,其將包含以下組成部分:

(You Gotta) Fight For Your Right (to Party) 
^-------this part will be matched --------^ 

但通過使用否定的字符類[^()]+的,它將匹配除了括號升括號之間的每一件事這使得您的正則表達式引擎停止在每個右括號處。

(You Gotta) Fight For Your Right (to Party) 
^  ^     ^ ^
+0

任何想法如何提取括號內的文本,包括'('和')'? – SpanishBoy

+1

@SpanishBoy如果你想得到括號,你可以刪除捕獲組。所以將'([^()] +)'改爲'[^()] + – Kasramvd