<div dir="ltr">No es exactamente lo que estas buscando pero puede que te sirva.<div><br></div><div>según entiendo quieres sacar todo el texto que este entre:</div><div>== {{codigo+id\d}} ==</div><div>y la siguiente linea que empiece con ==</div><div><br></div><div>usando (?<...) y (?=...) lookbehind y lookahead para asegurarse que el texto este entre estos dos "tokens"</div><div>pero que no se incluyan en el resultado.</div><div><br></div><div><div>con este regex encuentras todos los textos que coincidan con este criterio.</div><div>luego solo usas el primero que debe ser el que buscas.</div></div><div><br></div><div><div>import re<br><br>rfind = re.compile(r'''<br> (?<==\s{{codigo\+id\d}}\s==\n) # El {{codigo}} arriba del texto que quieres<br> .*? # El texto que quieres<br> (?=\n==\s|$) # La siguiente linea que comienza con == o el fin de la linea<br> ''', re.DOTALL | re.VERBOSE)<br><br>rfind.findall(opcion1)[0]<br>rfind.findall(opcion2)[0]<br>rfind.findall(opcion3)[0]<br></div></div><div><br></div><div>Espero te sirva.</div><div><br></div><div>Jhonatan.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">El mié., 20 may. 2020 a las 12:49, kikocorreoso vía Python-es (<<a href="mailto:python-es@python.org">python-es@python.org</a>>) escribió:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><br></div><div>‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐<br></div><div> On Wednesday, May 20, 2020 6:10 PM, AGTUGO <<a href="mailto:agtugo@gmail.com" target="_blank">agtugo@gmail.com</a>> wrote:<br></div><div> <br></div><blockquote type="cite"><div dir="auto">No entendí el problema, podrías explicarmelo otra vez?<br></div></blockquote><div><br></div><div><div>La verdad es que quizá no me he explicado bien :-P<br></div><div><div><br></div></div><div>Empiezo de nuevo.<br></div><div><div><br></div></div><div class="gmail_quote"><div>El problema. Imaginad que tengo una cadena que es algo así:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion1 = """</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto es parte de </span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">un texto que no me interesa lo más mínimo.</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id1}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">Esta sería la parte que me interesa </span></span></b><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{puede tener cosas así}} ===</span></span></b><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><span style="color:rgb(42,71,246)"><b>pero ninguna línea de este texto empieza con doble signo de igual==</b></span><br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id2}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">En la anterior línea debería de haber dejado de extraer mi patrón puesto</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">que empieza con doble línea</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"> y es lo que limita lo que busco<br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{loquesea}} ===</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto sigue sin interesarme</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id3}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto tampoco me interesa</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{loquesea}} ===</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">y esto tampoco</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"""</span><br></div><div><div><div><br></div></div></div><div>Otra opción es que sea:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion2 = """</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto es parte de <br>un texto que no me interesa lo más mínimo.<br>== {{codigo+id1}} ==</span></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">Esta sería la parte que me interesa</span></span></b><br></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{puede tener cosas así}} ===</span></span></b><br></div></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><span style="color:rgb(42,71,246)"><b>pero ninguna línea de este texto empieza con doble signo de igual==</b></span></span><br></div><div><div class="gmail_quote"><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== lo que sea ==</span><br></div><div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">En la anterior línea debería de haber dejado de extraer mi patrón puesto</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">que empieza con doble línea</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"> y es lo que limita lo que busco</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{loquesea}} ===</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto sigue sin interesarme"""</span></div><div><div><br></div></div></div><div>Otra opción es que sea:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion3 = """</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">esto es parte de </span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">un texto que no me interesa lo más mínimo.</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id1}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><br></span></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">Esta sería la parte que me interesa </span></span></b><br></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{puede tener cosas así}} ===</span></span></b><br></div></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><span style="color:rgb(42,71,246)"><b>pero ninguna línea de este texto empieza con doble signo de igual==</b></span>"""</span><br></div><div><div class="gmail_quote"><div><div><div><br></div></div></div><div><span style="font-family:arial,sans-serif">Es decir, quiero extraer esto:</span><br></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">Esta sería la parte que me interesa</span></span></b><br></div><div><b><span style="color:rgb(42,71,246)"><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{puede tener cosas así}} ===</span></span></b><br></div></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><span style="color:rgb(42,71,246)"><b>pero ninguna línea de este texto empieza con doble signo de igual==</b></span></span><br></div><div><div class="gmail_quote"><div><div><br></div></div><div><span style="font-family:arial,sans-serif">coger todo lo que haya entre </span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"== {{codigo+id1}} ==</span>" y una de las tres posibilidades que son:<br></div><ul><li><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"== {{codigo+id<b>n</b>}} ==</span>" el siguiente código <span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">idn</span> que no sea <span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">id1.</span><br></li><li>"<span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== otras cosas ==</span>" (estas otras cosas siempre empiezan con signo '=' repetido dos veces, pero no más, al principio de línea).<br></li><li>"fin de la cadena", es decir, que no encuentra ni lo primero ni lo segundo y llega al final.<br></li></ul><div>Lo anterior se puede reducir a dos posibilidades. Quiero extraer todo lo que esté entre <span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"== {{codigo+id1}} ==</span>" y:<br></div><ul><li>La primera línea que empiece por "<span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== </span>" (inicio de línea y solo dos símbolos de igual (no tres o más)).<br></li></ul><div>o<br></div><ul><li>El final de la cadena.<br></li></ul><div>No sé si ahora se entiende mejor.<br></div><div><br></div><div>Si además de darme un patrón me lo explicáis un poco os lo agradezco.<br></div></div><div><div><br></div></div></div><div>Gracias.<br></div><div><br></div><div>Saludos.<br></div><div><br></div><blockquote type="cite"><div class="gmail_quote"><div dir="ltr">On Wed, May 20, 2020, 9:06 AM kikocorreoso vía Python-es <<a href="mailto:python-es@python.org" target="_blank">python-es@python.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>Buenas a todos.<br></div><div><br></div><div>A ver si alguien me puede echar un cable porque llevo varios días dándome cabezazos y no soy capaz de sacarlo y mi regex-fu no llega más allá y sé que aquí hay auténticos maestros.<br></div><div><br></div><div>El problema. Imaginad que tengo una cadena que es:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion1 = """</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">f safsj ofsa</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"> sadjfoisajd</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id1}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>jfpoj </b></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b></b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>=== {{loquesea}} ===</b></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b></b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>eij peoijgipwg</b></span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id2}} ==</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">jfpoj</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{loquesea}} ===</span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"></span><br></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">eij peoijgipwg</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id3}} ==</span><br></div><div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">jfpoj</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">=== {{loquesea}} ===</span><br></div></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">eij peoijgipwg"""</span><br></div><div><br></div><div>Otra opción es que sea:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion2 = """</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">f safsj ofsa</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"> sadjfoisajd</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id1}} ==</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>jfpoj </b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>=== {{loquesea}} ===</b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>eij peoijgipwg</b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== otras cosas ==</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">gjopeij </span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">ep ep o"""</span><br></div><div><br></div><div>Otra opción es que sea:<br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">opcion3 = """</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">f safsj ofsa</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"> sadjfoisajd</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== {{codigo+id1}} ==</span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>jfpoj</b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>=== {{loquesea}} ===</b></span><br></div><div><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif"><b>eij peoijgipwg</b>"""</span><br></div><div><br></div><div><span style="font-family:arial,sans-serif">Es decir, quiero coger todo lo que haya entre </span><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"== {{codigo+id1}} ==</span>" y una de las tres posibilidades que son:<br></div><ul><li><span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">"== {{codigo+id<b>n</b>}} ==</span>" el siguiente código <span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">idn</span> que no sea <span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">id1.</span><br></li><li>"<span style="font-family:menlo,consolas,"courier new",monospace,sans-serif">== otras cosas ==</span>" (estas otras cosas siempre empiezan con signo '=' repetido dos veces, pero no más, al principio de línea).<br></li><li>"fin de la cadena", es decir, que no encuentra ni lo primero ni lo segundo y llega al final.<br></li></ul><div>Si además de darme un patrón me lo explicáis un poco os lo agradezco.<br></div><div><br></div><div>Muchas gracias.<br></div><div><br></div><div>Saludos.<br></div><div>_______________________________________________<br></div><div> Python-es mailing list<br></div><div> <a href="mailto:Python-es@python.org" rel="noreferrer" target="_blank">Python-es@python.org</a><br></div><div> <a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br></div></blockquote></div></blockquote><div><br></div>_______________________________________________<br>
Python-es mailing list<br>
<a href="mailto:Python-es@python.org" target="_blank">Python-es@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/python-es" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/python-es</a><br>
</blockquote></div>