如何编写正则表达式来检索此字符串中的类型?

时间:2015-07-11 16:01:31

标签: python regex

如果我想从这个class 'pandas.core.index.Index中提取一个只有['恐怖','成人','邪教电影'等等]的列表,那么最好的正则表达式是什么?什么东西抓住资本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')

2 个答案:

答案 0 :(得分:1)

您可以使用以下正则表达式:

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

请参阅DEMO

答案 1 :(得分:1)

您可以在列表解析中使用以下正则表达式:

>>> 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,它会匹配](?<=\[T\.)之间没有(?=\])的每一个。{/ p>

另请注意,作为一种更加pythonic和优化的方式,我使用re.compile在列表理解之外编译正则表达式,以拒绝在每次迭代中编译正则表达式。