2015-07-11 149 views
0

如果我想從這個class 'pandas.core.index.Index中提取一個['Horror','Adult','Cult Movies'等]的列表,那麼對此最好的正則表達式是什麼?是什麼東西抓住了大寫字母Ts之後的所有東西,直到封閉的支架?但是,鑑於「電視」是以資本T開始的,那麼一種糟糕的做法呢?這種方法應該在這裏?我從來沒有使用過正則表達式,所以會感謝任何建議/代碼!正則表達式需要幫助

Index([u'variable[T.Horror]', u'variable[T.Adult]', u'variable[T.Cult Movies]', u'variable[T.Mystery & Suspense]', u'variable[T.Science Fiction & Fantasy]', u'variable[T.Western]', u'variable[T.Gay & Lesbian]', u'Q("Tomato-meter")', u'variable[T.Comedy]', u'variable[T.Television]', u'variable[T.Kids & Family]', u'variable[T.Classics]', u'variable[T.Drama]', u'variable[T.Art House & International]', u'variable[T.Romance]', u'variable[T.Special Interest]', u'variable[T.Animation]', u'variable[T.Documentary]', u'variable[T.Musical & Performing Arts]', u'variable[T.Sports & Fitness]', u'variable[T.Faith & Spirituality]', u'variable[T.Anime & Manga]', u'Intercept'], dtype='object') 
+1

爲什麼不僅僅是'T.'(包括句號)之後的所有內容? –

+0

有沒有一種方法可以做'T之後的所有事情'直到]'? – SpicyClubSauce

+0

當然:'T \。(。*)\]'。括號表示捕獲組 –

回答

1

您可以使用下面的正則表達式:

(?<=T\.)([^\]]+) 

DEMO

+0

我在這裏做錯了什麼? 進口重新 REG = re.compile(R '(?<= T \。)([^ \]] +)',testreginput) 打印REG testreginput是大代碼塊在我的問題字符串... – SpicyClubSauce

0

您可以在列表解析中使用以下正則表達式:

>>> import re 
>>> regx=re.compile(r'(?<=\[T\.)([^\]]+)(?=\])') 
>>> [regx.search(i).group() for i in mylist if '[' in i] 
[u'Horror', u'Adult', u'Cult Movies', u'Mystery & Suspense', u'Science Fiction & Fantasy', u'Western', u'Gay & Lesbian', u'Comedy', u'Television', u'Kids & Family', u'Classics', u'Drama', u'Art House & International', u'Romance', u'Special Interest', u'Animation', u'Documentary', u'Musical & Performing Arts', u'Sports & Fitness', u'Faith & Spirituality', u'Anime & Manga'] 

此正則表達式中使用positive look-around這將沒有匹配每個thins 10在(?<=\[T\.)(?=\])之間。

另請注意,作爲一種更爲pythonic和優化的方式,我使用re.compile在列表理解之外編譯正則表達式以拒絕編譯每次迭代中的正則表達式。