使用Python正则表达式过滤推文

时间:2012-11-22 17:09:56

标签: python regex twitter

我正在尝试创建一个按@或#标签过滤推文的查询。

所以我只想要@Obama或#Obama的结果,而不是奥巴马。这就是我到目前为止所做的:

re.compile(r'\b(?:#|@|)*%s*\b' % re.escape(obama), re.IGNORECASE)

感谢回复....我尝试了两个答案,在我的情况下似乎有效:

 re.compile(r'\b[#@]*%s\b' % re.escape(term), re.IGNORECASE)  

'term'是我迭代的列表中的元素。然后,这将返回具有#或@预先填写'term'的推文。 Itried不使用'*',但它给出了异常。

由于

2 个答案:

答案 0 :(得分:1)

尝试使用此正则表达式:

r'\b[#@]{name}\b'.format(name=re.escape('Obama'))

字符类[%@]的工作速度比选择组(?:#|@)快。

因此,我们从单词边界\b开始,然后是#@。然后从obama变量替换。然后走到尾随边界。

在您使用*量词的问题中,这些量词从0到无穷大时间重复前一个表达式。没有理由重复#@符号。此外,obama的最后一个sybmol也不应重复。

答案 1 :(得分:1)

如果这纯粹与正则表达式有关,并且与Twitter本身无关(除了您正在过滤推文的事实),那么您想要的正则表达式是:

compiled = re.compile(r'\b[#@]obama\b', re.IGNORECASE)

如果你想要一些代码做一些类似于你正在做的事情的例子,请看一下这可能是一个值得的例子:

https://github.com/kgaughan/is-on-a-train/blob/master/isonatrain.py

该代码跟踪一群用户,寻找某些触发短语,并根据他们所说的内容写出HTML文件。