如何从一个列中提取链接和用户,然后将它们放置在另一列中?

问题描述

我有一列包含用户信息和如下链接

tweet
1   "¿Tienes dudas sobre #ciberseguridad y no sabes a quién acudir? Desde @INCIBE queremos recordarte que estamos a tu disposición en nuestro teléfono gratuito ☎017. ¡Te ayudaremos!
?  https://www.osi.es/es/contacto  pic.twitter.com/uJ3zNQxfda"
2   Hola @ProtoMot,te recomendamos que leas el siguiente artículo de nuestra web y si sigues teniendo dudas puedes llamarnos gratuitamente al 017 la Línea de Ayuda en Ciberseguridad. https://www.osi.es/es/actualidad/blog/2019/04/04/microsoft-te-ha-llamado-sin-haberlo-solicitado …
3   "Hola @Lotharmatao2020,para atender tu consulta de forma personalizada puedes ponerte en contacto con nosotros llamando gratuitamente al 017,la Línea de Ayuda en Ciberseguridad.
 https://www.incibe.es/linea-de-ayuda-en-ciberseguridad …"

我想创建一些可以识别用户和行链接的东西。这样,我在数据框中有一个新列,结果如下:

 tweet_mentions
    1    @INCIBE
     https://www.osi.es/es/contacto  pic.twitter.com/uJ3zNQxfda"
    2 @ProtoMot
https://www.osi.es/es/actualidad/blog/2019/04/04/microsoft-te-ha-llamado-sin-haberlo-solicitado …
    3    @Lotharmatao2020
     https://www.incibe.es/linea-de-ayuda-en-ciberseguridad …"

我当时正在考虑创建一个识别@和https的函数,但是我不知道什么是实现此功能的最佳方法

解决方法

这是一种方法:

import re

a = [
   '¿Tienes dudas sobre #ciberseguridad y no sabes a quién acudir? Desde @INCIBE queremos recordarte que estamos a tu disposición en nuestro teléfono gratuito ☎017. ¡Te ayudaremos! ?  https://www.osi.es/es/contacto  pic.twitter.com/uJ3zNQxfda','Hola @ProtoMot,te recomendamos que leas el siguiente artículo de nuestra web y si sigues teniendo dudas puedes llamarnos gratuitamente al 017 la Línea de Ayuda en Ciberseguridad. https://www.osi.es/es/actualidad/blog/2019/04/04/microsoft-te-ha-llamado-sin-haberlo-solicitado','Hola @Lotharmatao2020,para atender tu consulta de forma personalizada puedes ponerte en contacto con nosotros llamando gratuitamente al 017,la Línea de Ayuda en Ciberseguridad. https://www.incibe.es/linea-de-ayuda-en-ciberseguridad'
]

for n,s in enumerate(a):
   a_at = re.findall('@[^,]+',s)
   a_url = re.findall('https://[^,s)
   print(n,a_at)
   print(a_url)

请注意,这会错过诸如pic.twitter.com/uJ3zNQxfda之类的东西,但是您 可以说这不是有效的网址,因为它缺少协议。如果你需要 将网址与可选协议匹配,这将是更加困难的常规 表达。