Python 如何从具有特定条件的字符串中选择特定字符

Python 如何从具有特定条件的字符串中选择特定字符,python,regex,string,Python,Regex,String,我目前正在从事主题建模工作,我有一本字典,其中包含每个主题的信息以及与该主题对应的电影(如下所示): 在主题中,这些词都附有它们的词概率,因为这就是我如何从LDA中提取它们的方法 我想要的是,从这些主题中,只选择相关的词语,实现如下目标: {'Topic 49': ['alien science_fiction adventure action 2000', array(['Avatar', 'Men in Black 3', 'Transformers: Age of Extinction

我目前正在从事主题建模工作,我有一本字典,其中包含每个主题的信息以及与该主题对应的电影(如下所示):

在主题中,这些词都附有它们的词概率,因为这就是我如何从LDA中提取它们的方法

我想要的是,从这些主题中,只选择相关的词语,实现如下目标:

{'Topic 49': ['alien science_fiction adventure action 2000',
  array(['Avatar', 'Men in Black 3', 'Transformers: Age of Extinction',
         'Green Lantern', 'Men in Black II',
         'Final Fantasy: The Spirits Within', 'Treasure Planet',
         'Men in Black', 'A.I. Artificial Intelligence', 'Mission to Mars',
         'Independence Day', 'Titan A.E.', 'Sphere', 'Signs',
         'AVP: Alien vs. Predator', 'Zathura: A Space Adventure',
         'My Favorite Martian', 'I Am Number Four'], dtype=object)],...}
我试过好几种方法,但似乎无法奏效

我尝试过保留所有角色,但后来我也失去了2000这样的术语,它描述了电影年

我是否可以只选择*之后的单词(或年份中的数字)并用+号分隔


希望这是清楚的

您可以使用正则表达式仅提取主题中“%”之间的单词


试试这样:\“*?\”

您可以使用
re
模块

import re

ss = {'Topic 49': ['0.039*"alien" + 0.038*"science_fiction" + 0.020*"adventure" + 0.020*"action" + 0.017*"2000"',
  array(['Avatar', 'Men in Black 3', 'Transformers: Age of Extinction',
         'Green Lantern', 'Men in Black II',
         'Final Fantasy: The Spirits Within', 'Treasure Planet',
         'Men in Black', 'A.I. Artificial Intelligence', 'Mission to Mars',
         'Independence Day', 'Titan A.E.', 'Sphere', 'Signs',
         'AVP: Alien vs. Predator', 'Zathura: A Space Adventure',
         'My Favorite Martian', 'I Am Number Four'], dtype=object)],...}
s = [re.search(r'\"\w*\"', s).group(0).strip('"') for s in ss['Topic 49'][0].split('+')]
# print(s)
# ['alien', 'science_fiction', 'adventure', 'action', '2000']

假设字符串的格式非常严格,这可以通过pythons内置的字符串和数组操作函数实现:

my_string = '0.039*"alien" + 0.038*"science_fiction" + 0.020*"adventure" + 0.020*"action" + 0.017*"2000"'

sanitized_string = my_string.split('"')[1::2]
结果:

['alien', 'science_fiction', 'adventure', 'action', '2000']

这非常有效,非常感谢!您对我可以更熟悉regex的好资源有什么建议吗?因为所有这些条件对我来说仍然有点困惑。再次感谢您的时间!Regex101通常是我的方法。这是一个比我建议的更干净的实现
['alien', 'science_fiction', 'adventure', 'action', '2000']