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í:
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.
3 respuestas
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
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í:
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 ')]
Preguntas relacionadas
Nuevas preguntas
python
Python es un lenguaje de programación multipropósito, de tipificación dinámica y de múltiples paradigmas. Está diseñado para ser rápido de aprender, comprender y usar, y hacer cumplir una sintaxis limpia y uniforme. Tenga en cuenta que Python 2 está oficialmente fuera de soporte a partir del 01-01-2020. Aún así, para preguntas de Python específicas de la versión, agregue la etiqueta [python-2.7] o [python-3.x]. Cuando utilice una variante de Python (por ejemplo, Jython, PyPy) o una biblioteca (por ejemplo, Pandas y NumPy), inclúyala en las etiquetas.