import re import json import ast def extract_json_lenient(text): text = text.strip() if '{' in text: start_idx = text.find('{') end_idx = text.rfind('}' ) if end_idx > start_idx: return text[start_idx:end_idx+1] else: return text[start_idx:] return text def emergency_parse(response_clean): dados_extraidos = {} chaves_busca = ["personalidade", "vicios_linguagem", "vicioslinguagem", "gostos", "desgostos", "emocional"] # Regex para encontrar "chave: valor (até encontrar outra chave ou o fim)" for chave in chaves_busca: # Pattern mais agressivo: chave seguida de : ou = ou nada, pegando ate a proxima chave ou virgula seguida de proxima chave pattern = re.compile(rf"{chave}['\"]?\s*[:=]?\s*(.*?)(?=(?:{'|'.join(chaves_busca)})['\"]?\s*[:=]|$)", re.IGNORECASE | re.DOTALL) match = pattern.search(response_clean) if match: val = match.group(1).strip() # Remove chaves do json perdidas, aspas ou virgulas val = re.sub(r'^[\'"{}\[\]\s:]+|[\'"{}\[\]\s,:]+$', '', val).strip() if val: real_key = "vicios_linguagem" if chave == "vicioslinguagem" else chave dados_extraidos[real_key] = val return dados_extraidos payload = """{ personalidade: Curioso, crítico, direto., vicioslinguagem: pq, parece que, gostos: Política internacional, conflitos geopolíticos., desgostos: Prolongamento desnecessário de guerras., emocional: Que""" print(f"Payload original: {payload}") clean = extract_json_lenient(payload) print(f"Clean: {clean}") # Simula o fluxo do código atual # json_match = re.search(r'(\{.*?\})', clean, re.DOTALL) -> Isso falharia! json_match_old = re.search(r'(\{.*?\})', clean, re.DOTALL) print(f"Old Regex Match: {json_match_old}") results = emergency_parse(clean) print(f"Resultados Emergência: {results}")