[Python-es] Regex cadena multilinea
kikocorreoso
kachine en protonmail.com
Jue Mayo 21 03:37:13 EDT 2020
Sent with [ProtonMail](https://protonmail.com) Secure Email.
‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Wednesday, 20 de May de 2020 23:31, Jhonatan Sneider Salguero Villa <sney2002 en gmail.com> wrote:
> No es exactamente lo que estas buscando pero puede que te sirva.
>
> según entiendo quieres sacar todo el texto que este entre:
> == {{codigo+id\d}} ==
> y la siguiente linea que empiece con ==
>
> usando (?<...) y (?=...) lookbehind y lookahead para asegurarse que el texto este entre estos dos "tokens"
> pero que no se incluyan en el resultado.
>
> con este regex encuentras todos los textos que coincidan con este criterio.
> luego solo usas el primero que debe ser el que buscas.
>
> import re
>
> rfind = re.compile(r'''
> (?<==\s{{codigo\+id\d}}\s==\n) # El {{codigo}} arriba del texto que quieres
> .*? # El texto que quieres
> (?=\n==\s|$) # La siguiente linea que comienza con == o el fin de la linea
> ''', re.DOTALL | re.VERBOSE)
>
> rfind.findall(opcion1)[0]
> rfind.findall(opcion2)[0]
> rfind.findall(opcion3)[0]
Esas son piezas que me hacían falta, sí. Muchas gracias.
Lo acabé resolviendo.
Un saludo a todos.
> Espero te sirva.
>
> Jhonatan.
>
> El mié., 20 may. 2020 a las 12:49, kikocorreoso vía Python-es (<python-es en python.org>) escribió:
>
>> ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
>> On Wednesday, May 20, 2020 6:10 PM, AGTUGO <agtugo en gmail.com> wrote:
>>
>>> No entendí el problema, podrías explicarmelo otra vez?
>>
>> La verdad es que quizá no me he explicado bien :-P
>>
>> Empiezo de nuevo.
>>
>> El problema. Imaginad que tengo una cadena que es algo así:
>> opcion1 = """
>> esto es parte de
>> un texto que no me interesa lo más mínimo.
>> == {{codigo+id1}} ==
>>
>> Esta sería la parte que me interesa
>> === {{puede tener cosas así}} ===
>> pero ninguna línea de este texto empieza con doble signo de igual==
>> == {{codigo+id2}} ==
>> En la anterior línea debería de haber dejado de extraer mi patrón puesto
>> que empieza con doble línea y es lo que limita lo que busco
>> === {{loquesea}} ===
>> esto sigue sin interesarme
>> == {{codigo+id3}} ==
>> esto tampoco me interesa
>> === {{loquesea}} ===
>> y esto tampoco"""
>>
>> Otra opción es que sea:
>> opcion2 = """
>> esto es parte de
>> un texto que no me interesa lo más mínimo.
>> == {{codigo+id1}} ==
>> Esta sería la parte que me interesa
>> === {{puede tener cosas así}} ===
>> pero ninguna línea de este texto empieza con doble signo de igual==
>> == lo que sea ==
>> En la anterior línea debería de haber dejado de extraer mi patrón puesto
>> que empieza con doble línea y es lo que limita lo que busco
>> === {{loquesea}} ===
>> esto sigue sin interesarme"""
>>
>> Otra opción es que sea:
>> opcion3 = """
>> esto es parte de
>> un texto que no me interesa lo más mínimo.
>> == {{codigo+id1}} ==
>> Esta sería la parte que me interesa
>> === {{puede tener cosas así}} ===
>> pero ninguna línea de este texto empieza con doble signo de igual=="""
>>
>> Es decir, quiero extraer esto:
>> Esta sería la parte que me interesa
>> === {{puede tener cosas así}} ===
>> pero ninguna línea de este texto empieza con doble signo de igual==
>>
>> coger todo lo que haya entre "== {{codigo+id1}} ==" y una de las tres posibilidades que son:
>>
>> - "== {{codigo+idn}} ==" el siguiente código idn que no sea id1.
>>
>> - "== otras cosas ==" (estas otras cosas siempre empiezan con signo '=' repetido dos veces, pero no más, al principio de línea).
>> - "fin de la cadena", es decir, que no encuentra ni lo primero ni lo segundo y llega al final.
>>
>> Lo anterior se puede reducir a dos posibilidades. Quiero extraer todo lo que esté entre "== {{codigo+id1}} ==" y:
>>
>> - La primera línea que empiece por "== " (inicio de línea y solo dos símbolos de igual (no tres o más)).
>>
>> o
>>
>> - El final de la cadena.
>>
>> No sé si ahora se entiende mejor.
>>
>> Si además de darme un patrón me lo explicáis un poco os lo agradezco.
>>
>> Gracias.
>>
>> Saludos.
>>
>>> On Wed, May 20, 2020, 9:06 AM kikocorreoso vía Python-es <python-es en python.org> wrote:
>>>
>>>> Buenas a todos.
>>>>
>>>> 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.
>>>>
>>>> El problema. Imaginad que tengo una cadena que es:
>>>> opcion1 = """
>>>> f safsj ofsa
>>>> sadjfoisajd
>>>> == {{codigo+id1}} ==
>>>> jfpoj
>>>> === {{loquesea}} ===
>>>> eij peoijgipwg
>>>> == {{codigo+id2}} ==
>>>> jfpoj
>>>> === {{loquesea}} ===
>>>> eij peoijgipwg
>>>> == {{codigo+id3}} ==
>>>> jfpoj
>>>> === {{loquesea}} ===
>>>> eij peoijgipwg"""
>>>>
>>>> Otra opción es que sea:
>>>> opcion2 = """
>>>> f safsj ofsa
>>>> sadjfoisajd
>>>> == {{codigo+id1}} ==
>>>> jfpoj
>>>> === {{loquesea}} ===
>>>> eij peoijgipwg
>>>> == otras cosas ==
>>>> gjopeij
>>>> ep ep o"""
>>>>
>>>> Otra opción es que sea:
>>>> opcion3 = """
>>>> f safsj ofsa
>>>> sadjfoisajd
>>>> == {{codigo+id1}} ==
>>>> jfpoj
>>>> === {{loquesea}} ===
>>>> eij peoijgipwg"""
>>>>
>>>> Es decir, quiero coger todo lo que haya entre "== {{codigo+id1}} ==" y una de las tres posibilidades que son:
>>>>
>>>> - "== {{codigo+idn}} ==" el siguiente código idn que no sea id1.
>>>>
>>>> - "== otras cosas ==" (estas otras cosas siempre empiezan con signo '=' repetido dos veces, pero no más, al principio de línea).
>>>> - "fin de la cadena", es decir, que no encuentra ni lo primero ni lo segundo y llega al final.
>>>>
>>>> Si además de darme un patrón me lo explicáis un poco os lo agradezco.
>>>>
>>>> Muchas gracias.
>>>>
>>>> Saludos.
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> https://mail.python.org/mailman/listinfo/python-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20200521/bbd62f6c/attachment.html>
Más información sobre la lista de distribución Python-es