我想使用正则表达式从一些聊天记录中提取信息。要解析的字符串格式为03:22:32 PM <b>blcArmadillo</b>
。我使用python type()命令来查找变量消息是一个可调用的迭代器。我的问题是如何最有效地浏览可调用迭代器?它们是否像数组一样可以使用索引?我能找到“提取”数据的唯一方法是遍历返回的值并将它们添加到列表中,如下面的代码snipet所示。
times = []
messages = re.compile(r'(?P<time>..:..:.. ..).*?<b>(?P<usrname>.*?):</b>').finditer(search)
for result in messages:
times.append(result.group('time'))
有没有更好的方法来做到这一点?谢谢你的帮助。
答案 0 :(得分:4)
迭代器只是一个带有下一个方法的对象。每次调用它时,它都会返回集合中的下一个项目。如果需要访问任意索引,则几乎必须将其转换为列表。而不是:
for result in messages:
times.append(result.group('time'))
你可以这样说:
times = [result.group('time') for result in messages]
这几乎完全相同。但是,我应该警告你,为大型结果集执行此操作将非常缓慢并且会占用大量内存。因此,如果您不需要随机访问,则不应该这样做。如果不受信任的用户输入的数据将确定将显示多少结果,您可能还希望限制他们可以输入的内容的数量。
编辑:我刚刚注意到我之前的回答与您发布的代码段完全不同,所以我已经更新了。