I am trying to extract a info called "número de controle de cadeira cativa do Maracanã" (Maracanã's captive chair control number) from lawsuits using this regex:
cadeiras?\s*?(perpétua|cativa)?s?\s*?(de|com|,)?\s*?(o)?\s*?(número)?\s*?(de)?\s*?(controle)?\s*?(inicial)?\s*?(de)?\s*?(números?|nº)?\s*?(?<NUMERO_CONTROLE_CADEIRA>\d(\d|\s|-|–)+)\s*?(e)?\s*?\g<NUMERO_CONTROLE_CADEIRA>
The problem is that in cases where two control numbers appears separed by " e " (and in pt-br), even using \g subroutine, the second number is not beign captured:
O Autor é detentor do direito de uso de duas cadeiras perpétuas com o número de controle nº 1234-123456789 e 3421 – 11111111 (Doc. 04) do Estádio
NUMERO_CONTROLE_CADEIRA: 1234-123456789
Not only that, in some cases, the group value is incomplete (the last number is out):
O Autor é detentor do direito de uso de uma cadeira perpétua com o número de controle nº 4321-112223333 (Doc. 07) do Estádio Jornalista Mário Filho
NUMERO_CONTROLE_CADEIRA: 4321-11222333
I have more cases here: https://regex101.com/r/MxTAnZ/1
How can I fix this regex to get correctly these control numbers?
Assuming there is no more than 1 or 2 number, this regexp would capture both:
(\bcadeiras?\b|\bnúmero\b)\s*(perpétua|cativa)?s?\s*(de|com|,)?\s*(o)?\s*(número)?\s*(de)?\s*(controle)?\s*(inicial)?\s*(de)?\s*(números?|nº)?\s*(?<NUMERO_CONTROLE_CADEIRA>\d[-\d –\.]*\d)( e (números?|nº)?(?<NUMERO_CONTROLE_CADEIRA2>\d[-\d –\.]*\d))?See https://regex101.com/r/88PFZw/1
Note that you have both in your numbers: