2015-06-26 120 views
-1

這是我的字符串,EE(P1)BAEEEEEE(P1)(P2)EEAACIIII(P1)(P1)BACIA(P1)AIE
我想匹配)BAEEEEEE(但不是)(所以基本上(\).*?\() AND NOT (\)\()
更新:我不能用*替換*,因爲那會匹配)(P2)EEAACIIII(我不希望發生這種情況。我想匹配的唯一的事情是,如果之間存在的東西)和(Python中的正則表達式匹配

回答

2

使用+而不是*,因爲+意味着一個或多個字符(這inturn預計ATLEAST一個字符),而*意味着零個或多個。

\).+?\(

實施例:

>>> import re 
>>> s = "EE(P1)BAEEEEEE(P1)(P2)EEAACIIII(P1)(P1)BACIA(P1)AIE" 
>>> re.findall(r'\).+?\(', s) 
[')BAEEEEEE(', ')(P2)EEAACIIII(', ')(P1)BACIA('] 
>>> re.search(r'\).+?\(', s).group() 
')BAEEEEEE(' 

更新:

如果你不想匹配中間有字符串(,)的字符串,你可以像下面那樣修改上面的正則表達式。

>>> re.findall(r'\)[^()]+\(', s) 
[')BAEEEEEE(', ')EEAACIIII(', ')BACIA('] 
+0

是的,這會工作,但隨後將匹配')(P2)EEAACIIII('我不希望這樣的事情發生 – Gokul1794

+0

檢查我的更新.. –

2

您可以使用:

\)[^\(]+?\(

這將匹配)和遇到的第一個(之間的任何東西。因此,它將匹配)Sgsdgsg(而不是)(dg)sdgsgsh(,因爲在)(dg)sdgsgsh(中,在)之後遇到第一個(,即)(的形式。不過,這反而匹配)sdgsgsh(

+0

太謝謝你了! – Gokul1794

+0

如果OP唐''不想選擇')foo)kkf('然後他可以使用'\)[^ \(\)] +?\('。 –