<p>findall的另一个解决方案:</p>
<pre><code>re.findall(r"(?s)(?:\d+\.\s|(?:\d+\.)+\d+\s)(?:(?!\d+\.).)+",txt)
Out:
['11.3.2 Debe llevarse a cabo mediante equipos o sistemas de seguridad que eviten \nla explosión por golpe, chispa o calentamiento.',
'12. Requisitos de seguridad e \nhigiene para el transporte y almacenamiento de sustancias corrosivas, irritantes \no tóxicas',
'12.1 El almacenamiento de sustancias corrosivas, irritantes o tóxicas debe \nhacerse en recipientes específicos, de materiales compatibles con la sustancia de \nque se trate.',
'12.2 Cuando el transporte de sustancias corrosivas, irritantes o \ntóxicas en los centros de trabajo se realice a través de un sistema de tuberías o \nrecipientes portátiles, éstos deben estar cerrados para evitar que su contenido se \nderrame o fugue.']
"""
(?s) '.' matches \n, too
(?:\d+\.\s|(?:\d+\.)+\d+\s) the exact numbering pattern
(?:(?!\d+\.).)+ matches any character which not a start of a numbering
Edit:
(?:.(?!\d+\.))+ changed to (?:(?!\d+\.).)+
The previous pattern cuts the last char (in our case the space) before the numbering.
"""
</code></pre>