0

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

所以我只想要@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' 是我迭代的列表中的一个元素。然后,这将返回在“术语”前带有 # 或 @ 的推文。Itried 不使用 '*' 但它给出了异常。

谢谢

4

2 回答 2

1

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

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

如果您想要一些代码的示例与您正在做的事情类似,请查看此示例,因为它可能是一个有价值的示例:

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

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

于 2012-11-22T17:26:39.507 回答
1

尝试使用这个正则表达式:

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

字符[%@]类比选择组工作得更快(?:#|@)

所以,我们从单词边界开始\b,然后是#@。然后从obama变量中替换。然后是尾随边界。

在问题中,您使用*了从 0 到无穷次重复前一个表达式的量词。没有理由重复#@符号。此外,最后一个 sybmolobama也不应该重复。

于 2012-11-22T17:21:01.190 回答