我正在尝试创建一个按@或#标签过滤推文的查询。
所以我只想要@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不使用'*',但它给出了异常。
由于
答案 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文件。