请问您能帮我解决以下疑问吗?
我有一条短信:
text = VLOG - Primer evento de la temporada #ModaenTiktok #eventotiktok #madrid @Tik Tok españa
我只需要提取提及:
@Tik Tok españa
最经济实惠的方法是什么?
我尝试过:
regex = re.compile("(^|\W)(?:@)([A-Za-z0-9_](?:(?:[A-Za-z0-9_]|(?:\.(?!\.))){0,28}(?:[A-Za-z0-9_]))?)", re.UNICODE)
mention = regex.findall(text)
但我只得到
Tik
。
根据对您问题的评论,您似乎正在尝试收集
@
标签,这些标签可能有空格,也可能没有空格。从文本中,我们可以看到这些标签以 @
开头,但绝不允许使用 #
,因为这是主题标签而不是标签。因此,我们可以使用这两个规则编写一个非常简单的正则表达式解决方案:
re.compile(r"\@[^\#\@\n]+?(?= *[\#\@\n]|$)")
更详细地说,这里我们收集以
@
开头的任何文本,并收集任何内容(不包括其他 @、# 或硬回车(只是好的做法)),并在下一个字符是另一个 时停止。 @
标签、#
或字符串\行的末尾。我在前瞻的开头添加了一个 *
,因为这将允许正则表达式也忽略任何尾随空格,但这是可选的。
您可以在这里看到它的工作原理:https://regex101.com/r/2T07b0/1