如何在Python中搜索并提取文本中的@提及内容?
提取文本中的@提及内容(含空格)
问题分析
你之前的正则表达式仅匹配到Tik,原因有两点:
- 正则限定了仅允许字母、数字、下划线和不连续的点,未包含空格和西班牙语特有的重音字符(如
ñ); - 正则内的分组设计导致
findall返回的是分组捕获内容,而非完整的@提及字符串。
最优简便实现
根据你的需求(提取含空格的完整@提及),可以用两种简洁的正则方案:
方案1:针对当前文本的精准匹配(分隔符为#)
如果你的文本中@提及总是出现在#标签之后、行尾之前,直接匹配@开头到下一个#之前的所有内容:
import re text = "VLOG - Primer evento de la temporada #ModaenTiktok #eventotiktok #madrid @Tik Tok españa" regex = re.compile(r'@[^#]+') mentions = regex.findall(text) print(mentions) # 输出: ['@Tik Tok españa']
方案2:通用匹配(支持多语言、含空格的@提及)
如果需要适配更多场景(比如提及后可能是标点、换行或其他符号),可以匹配@开头,后跟包含字母、空格、Unicode重音字符的内容:
import re text = "VLOG - Primer evento de la temporada #ModaenTiktok #eventotiktok #madrid @Tik Tok españa" # 匹配@开头,包含字母、空格、西班牙语/拉丁语系重音字符的内容 regex = re.compile(r'@[\w\s\u00C0-\u017F]+') mentions = regex.findall(text) print(mentions) # 输出: ['@Tik Tok españa']
说明
[^#]+表示匹配除#之外的任意字符,适合当前文本的结构;[\w\s\u00C0-\u017F]+覆盖了字母、数字、下划线、空格,以及常见的欧洲语言重音字符(如ñ、á、é等),通用性更强;- 避免了原正则中不必要的分组和长度限制,简化了逻辑且更贴合需求。
内容的提问来源于stack exchange,提问作者Alexander Ramos
相关产品推荐
相关产品推荐

