INNER CODE UNIT · Python
parse_citation
lawve-ai/awesome-legal-skills · skills/ktzr-polskie-umowy-gospodarcze-adam-piotrowski/tools/legal-cite/legal_cite/core.py:68
def parse_citation(raw: str) -> dict | None:
"""Parsuje cytat: 'art. N[a][¹] [ust./§ M] [pkt/lit. X] KOD' → {art, ustep, act}.
Obsługuje sufiks literowy (36a), indeks górny (385¹/385[1]/385(1)) i § jako
jednostkę redakcyjną (KC numeruje paragrafami)."""
m = re.match(
r'(?:art\.|§)\s*'
r'(\d+[a-z]?(?:\s*(?:[¹²³⁴⁵⁶⁷⁸⁹]+|\[\d+\]|\(\d+\)|\^\d+))?)\s*' # numer art. + opc. indeks
r'(?:(?:ust\.|§)\s*(\d+\w?))?\s*' # ustęp ALBO paragraf
r'(?:(?:pkt|lit\.)\s*\S+\s*)?(.+)', # pkt/lit ignorowane; kod aktu
raw.strip(), re.IGNORECASE,
)
if not m:
return None
return {
"art": m.group(1).strip(),
"ustep": m.group(2),
"act": m.group(3).strip().rstrip('.').strip(),
}