"""Divide un archivo .vcf en sus VCARDs individuales. Funcion pura: sin I/O, sin estado, determinista. Recibe el texto completo de un archivo .vcf (que puede contener N tarjetas concatenadas) y devuelve una lista de strings, cada uno un VCARD completo (BEGIN:VCARD..END:VCARD) ya stripeado. Solo usa stdlib (re). """ import re _VCARD_RE = re.compile(r"BEGIN:VCARD.*?END:VCARD", re.DOTALL) def split_vcards(vcf_text: str) -> list: """Divide el texto de un .vcf en VCARDs individuales. Args: vcf_text: contenido completo del archivo .vcf, con una o varias tarjetas concatenadas. Tolera saltos de linea LF o CRLF. Returns: Lista de strings. Cada elemento es un VCARD completo ('BEGIN:VCARD'..'END:VCARD') stripeado de espacios al inicio/fin. Lista vacia si no hay ninguna tarjeta. """ if not vcf_text: return [] return [m.strip() for m in _VCARD_RE.findall(vcf_text)]