¿Cómo extraer una cadena entre otras 2 cadenas en python?

Me gusta si tengo una cadena como str1 = "IWantToMasterPython"

Si quiero extraer "Py" de la cadena anterior. Yo escribo:

 extractedString = foo("Master","thon") 

Quiero hacer todo esto porque estoy tratando de extraer letras de una página html. Las letras están escritas como

....lyrics goes here....

.

Cualquier sugerencia sobre cómo puedo implementar.

La solución es usar una expresión regular:

 import re r = re.compile('Master(.*?)thon') m = r.search(str1) if m: lyrics = m.group(1) 

BeautifulSoup es la forma más fácil de hacer lo que quieres. Se puede instalar como:

 sudo easy_install beautifulsoup 

El código de ejemplo para hacer lo que quieres es:

 from BeautifulSoup import BeautifulSoup doc = ['
Hey You
'] soup = BeautifulSoup(''.join(doc)) print soup.find('div', {'class': 'lyricbox'}).string

Puede usar urllib de Python para capturar contenido de la url directamente. El documental Beautiful Soup también es útil si desea realizar más análisis.

 def foo(s, leader, trailer): end_of_leader = s.index(leader) + len(leader) start_of_trailer = s.index(trailer, end_of_leader) return s[end_of_leader:start_of_trailer] 

esto genera ValueError si el líder no está presente en la cadena s, o el trailer no está presente después de eso (no ha especificado qué comportamiento desea en tales condiciones anómalas; generar una excepción es una cosa bastante natural y Pythonic, dejando que la persona que llama lo maneja con un bash / excepto si sabe qué hacer en tales casos).

También es posible un enfoque basado en RE, pero creo que este enfoque de cadena pura es más simple.

Si está extrayendo datos de una página html, le sugiero encarecidamente que utilice la biblioteca BeautifulSoup . Lo usé también para extraer datos de html y funciona muy bien.

También puede intentar esto si desea que todas las incidencias se muestren en una lista:

 import re str1 = "IWantToMasterPython" out = re.compile('Master(.*?)thon', re.DOTALL | re.IGNORECASE).findall(str1) if out : print out