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