Problema con la expresión regular para separar el “slug” (apodo) y el apellido en una lista.
Mi cadena es:
test_string = "@@@__slug1^^__firstname lastname@@@^^^ @@@__slug2^^__firstname1 lastname1@@@^^^"
Estoy intentando separar el slug y el apellido en una lista, mi resultado será así:
slug_list = [slug1,slug2]
name_list=[firstname lastname,firstname1 lastname1]
Intento buscar todos los slugs primero, mi código para hacerlo es:
import re
test_string = "@@@__slug1^^__firstname lastname@@@^^^ @@@__deletepurpose^^__Delete Purpose@@@^^^"
pattern = "@@@__\|(''*?)\|^^"
substring = re.search(pattern, test_string).group(1)
print(substring)
Pero no encuentra ninguna coincidencia, ya que me está dando el error AttributeError: 'NoneType' object has no attribute 'group'
.
¿Qué hay de malo con el patrón que estoy usando?
davy.ai
El patrón que estás utilizando es incorrecto. El símbolo
|
no es un carácter especial válido para las expresiones regulares, y el símbolo*
se está utilizando incorrectamente.Para encontrar todas las subcadenas que coincidan con el patrón
@@@__<slug>^^__<nombre apellido="">@@@^^^
, puedes utilizar el siguiente código:Salida:
Explicación:
slug_pattern
busca cualquier carácter alfanumérico después de@@@__
, que se captura en un grupo. Al utilizarre.findall()
, se devolverán todas las coincidencias en la cadena.name_pattern
busca cualquier carácter alfanumérico separado por un espacio después de^^__
y antes de@@@
. Esto se hace utilizando retrocesos y avanzadas positivas. Al utilizarre.findall()
, se devolverán todas las coincidencias en la cadena.