2016-11-27 37 views
2

這是我在那裏我試圖以檢索3個捕獲組提取使用字符串捕捉組(使用re.match)

res = re.match("^(?![()]*)([()])(.*)$", input)

正則表達式,這是我預期的結果

input = "This is a()demo)" 
I would need 3 capture groups 
res.group(1) -> "This is a " 
res.group(2) -> "(" 
res.group(3) -> ")demo)" 

input = "Another demo)(continues...()" 
res.group(1) -> "Another demo " 
res.group(2) -> ")" 
res.group(3) -> "(continues...()" 

input = "(last demo() and finally" 
res.group(1) -> "" 
res.group(2) -> "(" 
res.group(3) -> "last demo() and finally" 

但是我寫的正則表達式並不匹配上面給出的3個輸入。我在這裏做錯了什麼?

+1

@anubhava感謝指點出來。更正 – Raj

回答

2

你做錯的第一件事就是用式斷言

(?![()]*) 

我猜你是想說「匹配任何字符除了()」。您可以通過使用^符號來啓動該組,使用常規匹配組來完成此操作。

([^()]*) 

否則,你的正則表達式是非常正確的。

這裏是一個正則表達式,這將使你的預期輸出

^([^()]*)([()])(.*)$ 

https://regex101.com/r/SD0L06/1

+1

一個很好的答案來解釋 – qxz