Como fazer o Regex ignorar um padrão seguindo um grupo específico

Eu fiz esta pergunta 2 meses atrás e peguei o seguinte padrão REGEX para capturar códigos ICD9. O que se espera é capturar apenas códigos ICD9 (ex: 134,57 ou V23,54 ou E33.62) e ignorar o peso do paciente em 134,57 lb ou um resultado de laboratório como 127,20 mg / dL.

icdRegex = recomp('(V\d{2}\.\d{1,2}|\d{3}\.\d{1,2}|E\d{3}\.\d)(?!\s*(?:kg|lb|mg)s?)') 

Agora exceções surgiram. A segunda parte da regex não ignora o padrão que é seguido por kg, lb, mg ou quaisquer outras palavras de parada.

Eu posso escrever algum Regex básico, mas isso está ficando um pouco complicado demais para o meu minúsculo cérebro e preciso de ajuda.

 (?:(?:V\d{1,2}\.\d{1,2})|(?:\d{1,3}\.\d{1,2})|(?:E\d{1,2}\.\d+))(?!\d|(?:\s*(?:kg|lb|mg)s?)) 

Tente isto. Veja a demonstração.

https://regex101.com/r/pM9yO9/12

modified the lookahead to include \d in it so that partial matches are avoided

 x="""134.57 or V23.54 or E33.62 134.57 lb or a lab result like 127.20 mg/dL""" print re.findall(r"(?:(?:V\d{1,2}\.\d{1,2})|(?:\d{3}\.\d{1,2})|(?:E\d{1,2}\.\d+))(?!\d|(?:\s*(?:kg|lb|mg)s?))",x) 

Saída: ['134.57', 'V23.54', 'E33.62']

Versão final testada contra os dados.

icdRegex = recomp (“(? 🙁 ?: V \ d {1,2}. \ d {1,2}) | (?: \ d {3}. \ d {1,2}) | (?: E \ d {1,2}. \ D +)) (?! \ D | (?: \ S * (?: kg | lb | mg) s?)) “) Códigos = findall (icdRegex, hit)

onde “hit” será a nota clínica.