【发布时间】:2017-11-09 14:20:53
【问题描述】:
我在 MongoDB 集合中收集了大约 140 万条推文。我想找到所有不是转推的,并且正在使用 Python。一个文档的结构如下:
{
'_id': ObjectId('59388c046b0c1901172555b9'),
'coordinates': None,
'created_at': datetime.datetime(2016, 8, 18, 17, 17, 12),
'geo': None,
'is_quote': False,
'lang': 'en',
'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s',
'tw_id': 766323071976247296,
'user_id': 2231233110,
'user_lang': 'en',
'user_loc': 'main; @Kan1shk3',
'user_name': 'sheezy0',
'user_timezone': 'Chennai'
}
我可以编写一个查询来从上面找到特定的推文:
twitter_mongo_collection.find_one({
'text': b'Adam Cole Praises Kevin Owens + A Preview For Next Week\xe2\x80\x99s'
})
但是当我尝试查找转推时,我的代码不起作用,例如我尝试查找任何以这样开头的推文:
'text': b'RT some tweet'
使用这个查询:
find_one( {'text': {'$regex': "/^RT/" } } )
它不会返回错误,但它没有找到任何东西。我怀疑这与正文开始之前开头的“b”有关。我知道我还需要在某处放 '$not:' 但不确定在哪里。
谢谢!
【问题讨论】:
-
我忘了提到我也试过这个:regx = re.compile("^RT") twitter_mongo_collection.find_one({"text": regx}) 它没有返回任何东西。
-
当使用带有“字符串”的
$regex时,您不包含斜杠,因此{ '$regex': '^RT' }是正确的语法。不过,re.compile的用法也应该是正确的。你至少能确定一份你认为“应该匹配”的文件吗?显示这可能指向问题。 -
谢谢!它仍然不适用于删除斜线。应该匹配的文档是:'text': b'RT @hewittsprints:可订购专业、个性化、设计和打印服务卡'。我不确定“b”是什么,但由于我的其他搜索查询需要它来工作,我假设它在这里也很重要,我只是不知道如何包含它。
-
这意味着它是一个字节字符串文字。我不“认为”它应该有效果。如果它实际上不是真正的开始,那么只测试
"RT"(作为测试)怎么样,所以从正则表达式中删除锚点。我还认为 Twitter 提要实际上具有“转发”的布尔值,它可能已从您的数据中删除,但确实应该存在,因为这比正则表达式更好。 -
可能是
re.compile(b'^RT')?取自Regular expression parsing a binary file?
标签: python regex mongodb twitter