No se puede recuperar del carácter especial al final de la cadena como Terminator con JSON usando expresiones regulares

María

Terminador de esta cadena Json por !!pero no en el último registro, por lo que no puedo recuperar todos los registros correspondientes ({.*?}!!)cuando lo uso, ({.*?})puedo recuperar todos, pero no, con valores completos.

JSON

x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

Buen formato

x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}
     !!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}
     !!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

Código Python

re.findall(r"(AAAAA@\d+##)({.*?})", x['d'])

Resultado

 [('AAAAA@5##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}'),
 ('AAAAA@6##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}'),
 ('AAAAA@7##', '{"pp-0":[{"pp-1": 1000, "pp-3": 1003}')]

Cuando uso el siguiente código

re.findall(r"(AAAAA@\d+##)({.*?}!!)", x['d'])

Segundo resultado

 [('AAAAA@5##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
   1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
 ('AAAAA@6##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!')]

Mostrar solo dos registros

Mi resultado esperado

  [('AAAAA@5##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
   1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
 ('AAAAA@6##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!'),
   ('AAAAA@7##',
 '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 
 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}')]
Epsi95
import re

x = {'d':'AAAAA@5##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@6##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}!!AAAAA@7##{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'}

# simply split the json by !! using str.split() method
# then find the groups
# group 1 --> (.*##)
# group 2--> ({.*})

[re.findall(r'(.*##)({.*})', i)[0] for i in x['d'].split('!!')]
[('AAAAA@5##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'),
 ('AAAAA@6##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}'),
 ('AAAAA@7##',
  '{"pp-0":[{"pp-1": 1000, "pp-3": 1003},{"pp-4": 1004, "pp-7": 1007},{"pp-8": 1008, "pp-11": 1011},{"pp-12": 1012,"pp-17": 1015}],"pp-17": 1015,"pp-17": 1015}')]

o usa regex por completo

re.findall(r'([^!]+##)({[^!]+})', x['d'])

Encuentre la explicación de expresiones regulares aquí

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

TOP Lista

CalienteEtiquetas

Archivo