RegEx Obtiene una cadena entre dos cadenas que tiene saltos de línea

Tengo la siguiente prueba (formateada como a continuación):

 My Class: TEST DATA
Test Section:
MY SECTION
MY SECTION 2

Estoy intentando obtener el texto entre “Sección de prueba: y después de MI SECCIÓN

He intentado varios bashs con diferentes patrones RegEx y no estoy llegando a ningún lado.

Si lo hago:

 (?<=Test)(.*?)(?=<br) 

Entonces obtengo la respuesta correcta de:

 ' Section: ' 

Pero si lo hago

 (?<=Test)(.*?)(?=) 

No obtengo resultados. Los resultados deben ser “MI SECCIÓN
Mi seccion 2

He intentado usar RegEx Multiline también sin resultados.

Cualquier ayuda sería apreciada.

Si importa estoy codificando en Python 2.7.

Si algo no está claro, o si necesita más información, hágamelo saber.

Utilice las re.S o re.DOTALL . O anteponer la expresión regular con (?s) para hacer . coincide con todos los caracteres (incluida la nueva línea).

Sin las banderas,. no coincide con la nueva línea.

 (?s)(?<=Test)(.*?)(?=) 

Ejemplo:

 >>> s = ''' ... My Class: TEST DATA
... Test Section:
... MY SECTION
... MY SECTION 2
... ''' >>> >>> import re >>> re.findall('(?<=Test)(.*?)(?=)', s) # without flags [] >>> re.findall('(?<=Test)(.*?)(?=)', s, flags=re.S) [' Section:
\n MY SECTION
\n MY SECTION 2
\n '] >>> re.findall('(?s)(?<=Test)(.*?)(?=)', s) [' Section:
\n MY SECTION
\n MY SECTION 2
\n ']

Obtener el grupo emparejado del índice 1

 Test Section:([\S\s]*) 

Demo en vivo

Nota: cambie la última parte según su necesidad.

Código de muestra:

 import re p = re.compile(ur'Test Section:([\S\s]*)', re.MULTILINE) test_str = u"..." re.findall(p, test_str) 

Explicación del patrón:

  Test Section: 'Test Section:' ( group and capture to \1: [\S\s]* any character of: non-whitespace (all but \n, \r, \t, \f, and " "), whitespace (\n, \r, \t, \f, and " ") (0 or more times (matching the most amount possible)) ) end of \1  ''