Necesito extraer encabezados y el fragmento de texto debajo de ellos de un archivo de texto en Python usando expresiones regulares, pero me resulta difícil.

Convertí este PDF a texto para que ahora se vea así:

img

Hasta ahora he podido obtener todos los encabezados numéricos (12.4.5.4, 12.4.5.6, 13, 13.1, 13.1.1, 13.1.12) usando la siguiente expresión regular:

import re

with open('data/single.txt', encoding='UTF-8') as file:

    for line in file:
        headings = re.findall(r'^\d+(?:\.\d+)*\.?', line)
        print(headings)`

Simplemente no sé cómo obtener la parte redactada de esos encabezados o el párrafo de texto debajo de ellos.

EDITAR - Aquí está el texto:

ES. EN 60601-1: 2006 y A1: 2013 y AC: 2014 y A12: 2014

60601-1 © IEC: 2005 60601-1 © IEC: 2005

- 337 - - 169 -

12.4.5.4 Otro EQUIPO ME que produce radiación diagnóstica o terapéutica Cuando corresponda, el FABRICANTE abordará en el PROCESO DE GESTIÓN DE RIESGOS los RIESGOS asociados con el EQUIPO ME que produce radiación diagnóstica o terapéutica que no sea para radiografías de diagnóstico y radioterapia (ver 12.4.5.2 y 12.4 .5.3).

El cumplimiento se verifica mediante la inspección del ARCHIVO DE GESTIÓN DE RIESGOS.

12.4.6 Presión acústica diagnóstica o terapéutica Cuando corresponda, el FABRICANTE abordará en el PROCESO DE GESTIÓN DE RIESGOS los RIESGOS asociados con la presión acústica diagnóstica o terapéutica.

El cumplimiento se verifica mediante la inspección del ARCHIVO DE GESTIÓN DE RIESGOS.

13 * SITUACIONES PELIGROSAS y condiciones de falla

13.1 SITUACIONES PELIGROSAS específicas

  • General

13.1.1 Al aplicar las CONDICIONES DE FALLA ÚNICA como se describe en 4.7 y se enumeran en 13.2, una a la vez, ninguna de las SITUACIONES PELIGROSAS en 13.1.2 a 13.1.4 (inclusive) debe ocurrir en el EQUIPO ME.

La falla de cualquiera de los componentes a la vez, que podría resultar en una SITUACIÓN PELIGROSA, se describe en 4.7.

  • Emisiones, deformación del cerramiento o temperatura superior a la máxima.

13.1.2 No deben ocurrir las siguientes SITUACIONES PELIGROSAS: - emisión de llamas, metal fundido, sustancias venenosas o inflamables en sustancias peligrosas

Cantidades;

- deformación de los CERRAMIENTOS hasta tal punto que se vea afectado el cumplimiento de 15.3.1; -

Temperaturas de PIEZAS APLICADAS que exceden los valores permitidos identificados en la Tabla 24 cuando se miden como se describe en 11.1.3; temperaturas de las partes del EQUIPO ME que no son PIEZAS APLICADAS pero que pueden tocarse, excediendo los valores permitidos en la Tabla 23 cuando se miden y ajustan como se describe en 11.1.3;

-

- superior a los valores permitidos para "otros componentes y materiales" identificados en la Tabla 22 por 1,5 menos 12,5 ° C. Los límites para los devanados se encuentran en la Tabla 26, Tabla 27 y Tabla 31. En todos los demás casos, se aplican los valores permitidos de la Tabla 22.

Las temperaturas se medirán utilizando el método descrito en 11.1.3.

Las CONDICIONES DE FALLA ÚNICA en 4.7, 8.1 b), 8.7.2 y 13.2.2, con respecto a la emisión de llamas, metal fundido o sustancias inflamables, no se aplicarán a las partes y componentes donde: - La construcción o el circuito de suministro limita la disipación de potencia en FALLA ÚNICA

CONDICIÓN a menos de 15 W o la disipación de energía a menos de 900 J.

2
wuddadid 29 sep. 2019 a las 17:47

3 respuestas

La mejor respuesta

Podrías usar tu patrón y unir un espacio después de él seguido por el resto de la línea.

Luego repita la coincidencia de todas las líneas siguientes que no comienzan con un encabezado.

^\d+(?:\.\d+)* .*(?:\r?\n(?!\d+(?:\.\d+)* ).*)*
  • ^\d+(?:.\d+)* Su patrón para que coincida con un encabezado seguido de un espacio
  • .* Coincide con cualquier personaje excepto una nueva línea 0+ veces
  • (?: Grupo sin captura
    • \r?\n Coincide con una nueva línea
    • (?! anticipación negativa, afirme que lo que está directamente a la derecha no es
      • \d+(?:.\d+)* El patrón de rumbo
    • ) Cerrar búsqueda anticipada
    • .* Coincide con cualquier personaje excepto una nueva línea 0+ veces
  • )* Cierra el grupo que no captura y repite más de 0 veces para que coincidan todas las líneas

Demostración de Regex

2
The fourth bird 29 sep. 2019 a las 15:47

Gracias a sus respuestas detalladas y explicaciones útiles, terminé combinando partes del código de @ The-quarter-bird y el código de @ Emma en esta expresión regular que parece funcionar bien para lo que necesito.

(^\d+(?:\.\d+)*\s+)((?![a-z])[\s\S].*(?:\r?\n))([\s\S]*?)(?=^\d+(?:\.\d+)*\s+(?![a-z]))

Aquí está el REGEX DEMO.

Hago lo que quiero, que es dividir el (encabezado numérico), (encabezado redactado) y el (cuerpo del texto) en grupos separados por comas que me permiten separarlos en columnas en Excel usando el delimitador personalizado ) , ( y algún otro procesamiento posterior.

Lo bueno de esta nueva expresión regular es que omite los títulos numerados que son solo referencias y no títulos realmente como se ve aquí:

img

1
wuddadid 1 oct. 2019 a las 10:56

Tal vez,

^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)

Podría estar algo cerca de obtener esos textos deseados que supongo.


Aquí simplemente buscamos líneas que comiencen con,

^(\d+(?:\.\d+)*)\s+

Entonces, simplemente recolectaríamos cualquier cosa luego usando

([\s\S]*?)

Hasta la siguiente línea que comenzaría con

(?=^\d+(?:\.\d+)*)

Entonces, podemos o no, dependiendo de cómo se vea nuestra entrada, solo nos queda un último elemento, que recopilaremos usando este último:

^(\d+(?:\.\d+)*)\s+([\s\S]*)

Que luego alteraríamos (usando |) a la expresión anterior.

A pesar de que este método es simple de codificar, es bastante lento en cuanto al rendimiento ya que estamos usando lookarounds, así que la otra respuesta aquí es mucho mejor, si la complejidad del tiempo fuera una preocupación, lo que probablemente sea.

Demo 1

Prueba

import re

regex = r"^(\d+(?:\.\d+)*)\s+([\s\S]*?)(?=^\d+(?:\.\d+)*)|^(\d+(?:\.\d+)*)\s+([\s\S]*)"
string = """

I.S. EN 60601-1:2006&A1:2013&AC:2014&A12:2014

60601-1 © IEC:2005 
60601-1 © IEC:2005

– 337 – 
– 169 –

12.4.5.4  Other ME EQUIPMENT producing diagnostic or therapeutic radiation 
When  applicable,  the  MANUFACTURER  shall  address  in  the  RISK  MANAGEMENT PROCESS  the 
RISKS associated  with  ME EQUIPMENT  producing  diagnostic or therapeutic radiation  other  than 
for diagnostic X-rays and radiotherapy (see 12.4.5.2 and 12.4.5.3). 

Compliance is checked by inspection of the RISK MANAGEMENT FILE.

12.4.6  Diagnostic or therapeutic acoustic pressure 
When  applicable,  the  MANUFACTURER  shall  address  in  the  RISK  MANAGEMENT PROCESS  the 
RISKS associated with diagnostic or therapeutic acoustic pressure. 

Compliance is checked by inspection of the RISK MANAGEMENT FILE.

13  *  HAZARDOUS SITUATIONS and fault conditions

13.1  Specific HAZARDOUS SITUATIONS

*  General 

13.1.1 
When  applying  the  SINGLE  FAULT  CONDITIONS  as  described  in  4.7  and listed  in  13.2,  one  at  a 
time,  none  of  the  HAZARDOUS  SITUATIONS  in  13.1.2  to  13.1.4  (inclusive)  shall  occur  in  the 
ME EQUIPMENT.

The failure of any one component at a time, which could result in a  HAZARDOUS  SITUATION, is 
described in 4.7. 

*  Emissions, deformation of ENCLOSURE or exceeding maximum temperature 

13.1.2 
The following HAZARDOUS SITUATIONS shall not occur: 
–  emission  of  flames,  molten  metal,  poisonous  or  ignitable  substance  in  hazardous 

quantities; 

–  deformation of ENCLOSURES to such an extent that compliance with 15.3.1 is impaired; 
– 

temperatures  of  APPLIED  PARTS exceeding  the  allowed  values  identified  in  Table  24  when 
measured as described in 11.1.3; 
temperatures  of  ME EQUIPMENT  parts  that  are  not  APPLIED  PARTS but  are  likely  to  be 
touched,  exceeding  the  allowable  values  in  Table  23  when  measured  and  adjusted  as 
described in 11.1.3; 

– 

–  exceeding the allowable values for “other components and materials” identified in Table 22 
times 1,5 minus 12,5 °C. Limits for windings are found in Table 26, Table 27 and Table 31. 
In all other cases, the allowable values of Table 22 apply. 

Temperatures shall be measured using the method described in 11.1.3. 

The  SINGLE  FAULT  CONDITIONS  in  4.7,  8.1 b),  8.7.2  and  13.2.2,  with  regard  to  the  emission  of 
flames,  molten  metal  or  ignitable  substances,  shall  not  be  applied  to  parts  and  components 
where: 
–  The  construction  or  the  supply  circuit  limits  the  power  dissipation  in  SINGLE  FAULT 

CONDITION to less than 15 W or the energy dissipation to less than 900 J. 

"""

print(re.findall(regex, string, re.M))

Salida

[('12 .4.5.4 ',' Otro EQUIPO ME que produce radiación diagnóstica o terapéutica \ nCuando corresponda, el FABRICANTE abordará en el PROCESO DE GESTIÓN DE RIESGOS los \ nRIESGOS asociados con el EQUIPO ME que produce radiación diagnóstica o terapéutica que no sea \ n para radiografías de diagnóstico y radioterapia (ver 12.4.5.2 y 12.4.5.3). \ n \ n El cumplimiento se verifica mediante la inspección del ARCHIVO DE GESTIÓN DE RIESGOS. \ n \ n ',' ',' '), ('12 .4.6', 'Diagnóstico o presión acústica terapéutica \ nCuando corresponda, el FABRICANTE abordará en el PROCESO DE GESTIÓN DE RIESGOS los \ nRIESGOS asociados con la presión acústica diagnóstica o terapéutica. \ n \ nEl cumplimiento se verifica mediante la inspección del ARCHIVO DE GESTIÓN DE RIESGOS. \ n \ n '' ', ''), ('13', '* SITUACIONES PELIGROSAS y condiciones de falla \ n \ n', '', ''), ('13 .1 ',' SITUACIONES PELIGROSAS específicas \ n \ n * General \ n \ n ', '', ''), ('13 .1.1 ',' Al aplicar las CONDICIONES DE FALLA ÚNICA como se describe en 4.7 y se enumera en 1 3.2, uno a la vez, ninguna de las SITUACIONES PELIGROSAS en 13.1.2 a 13.1.4 (inclusive) debe ocurrir en el \ nME EQUIPMENT. \ N \ nLa falla de cualquier componente a la vez, lo que podría resultar en un SITUACIÓN PELIGROSA, se describe en 4.7. \ n \ n * Emisiones, deformación del ENVOLTURA o exceso de temperatura máxima \ n \ n ',' ',' '), (' ',' ', '13 .1.2', 'No se producirán las siguientes SITUACIONES PELIGROSAS: \ n– emisión de llamas, metal fundido, sustancias venenosas o inflamables en \ n \ ncantidades peligrosas; \ n \ n– deformación de CERRAMIENTOS de tal manera que se vea afectada la conformidad con 15.3.1; \ n– \ n \ ntemperaturas de APLICADO PIEZAS que exceden los valores permitidos identificados en la Tabla 24 cuando \ nmedidas como se describe en 11.1.3; \ ntemperaturas de las partes del EQUIPO ME que no son PIEZAS APLICADAS pero que pueden \ n tocarse, excediendo los valores permitidos en la Tabla 23 cuando se miden y ajustan como \ ndescrito en 11.1.3; \ n \ n– \ n \ n– superior a los valores permitidos para "otros componentes y materiales" identificados en la Tabla 22 \ n veces 1,5 menos 12,5 ° C.Los límites para los devanados se encuentran en Tabla 26, Tabla 27 y Tabla 31. \ nEn todos los demás casos, el valor permitido es de la Tabla 22 se aplican. \ n \ nLas temperaturas se medirán utilizando el método descrito en 11.1.3. \ n \ nLAS CONDICIONES DE FALLA ÚNICA en 4.7, 8.1 b), 8.7.2 y 13.2.2, con respecto a la emisión de \ n llamas, metal fundido o sustancias inflamables, no se aplicarán a piezas y componentes \ n donde: \ n - La construcción o el circuito de suministro limita la disipación de energía en FALLA ÚNICA \ n \ nCONDICIÓN a menos de 15 W o la disipación de energía a menos de 900 J. \ n \ n ')]

1
Emma 30 sep. 2019 a las 16:28
58156300