Pages in topic: [1 2] > |
necesito ayuda para crear una expresión regular de búsqueda Thread poster: Angel Llacuna
|
Necesito crear una expresión regular que busque la segunda aparición de un carácter de tabulación en cada línea de un archivo de texto | | |
Es un poco difícil sin saber para qué es, si la idea es sustituirlo se me ocurrió rápidamente para Notepad++: Search: (?=\t)(.*)\t Replace: \1texto Donde "texto" es por lo que quiero reemplazar el tab. La coincidencia no es exactamente el segundo tab, es más bien todo lo que está entre el primer tab que encuentra en una nueva línea y ese tab, por eso al reemplazar repito lo que encontró ("match newline" tiene que estar desactivado). Me imagino... See more Es un poco difícil sin saber para qué es, si la idea es sustituirlo se me ocurrió rápidamente para Notepad++: Search: (?=\t)(.*)\t Replace: \1texto Donde "texto" es por lo que quiero reemplazar el tab. La coincidencia no es exactamente el segundo tab, es más bien todo lo que está entre el primer tab que encuentra en una nueva línea y ese tab, por eso al reemplazar repito lo que encontró ("match newline" tiene que estar desactivado). Me imagino que debe haber formas más elegantes y sin duda debe ser posible hacer que ese tab sea un match individual, pero probablemente si es para sustituirlo o borrarlo esto funcione. ▲ Collapse | | |
Daniel Frisano Italy Local time: 12:56 Member (2008) English to Italian + ... Dos preguntas | Jun 13, 2018 |
1) ¿Sólo encontrar o también sustituir? 2) Si hay que sustituir, ¿puedes pasarlo a Excel?
[Edited at 2018-06-13 01:24 GMT] | | |
Angel Llacuna Spain Local time: 12:56 English to Spanish TOPIC STARTER es para hacer búsqueda y sustitución ... | Jun 13, 2018 |
el segundo carácter de tabulación de cada línea se sustituirá por un espacio en blanco. El archivo es un archivo de texto plano , con el que trabajo en Notepad++. En este caso, un glosario al que voy añadiendo entradas. En la imagen podéis ver un fragmento del archivo, donde aparecen marcados en rojo un par de caracteres de tabulación que deberán sustituirse (son la segunda tabulación en la línea respectiva) ... See more el segundo carácter de tabulación de cada línea se sustituirá por un espacio en blanco. El archivo es un archivo de texto plano , con el que trabajo en Notepad++. En este caso, un glosario al que voy añadiendo entradas. En la imagen podéis ver un fragmento del archivo, donde aparecen marcados en rojo un par de caracteres de tabulación que deberán sustituirse (son la segunda tabulación en la línea respectiva) ▲ Collapse | |
|
|
Daniel Frisano Italy Local time: 12:56 Member (2008) English to Italian + ...
Bueno, si se puede pasarlo temporalmente a Excel y de vuelta a Notepad++ sin que ocurran desastres, se puede intentar con lo siguiente: 1) Sustituir todos las tabuladores con un carácter que no se usa nunca, por ejemplo §. 2) Pasarlo a Excel. Si el texto está en la columna A, en la B se pone: =LEFT(REPLACE(REPLACE(REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!");FIND("§";REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!"));1;" ");... See more Bueno, si se puede pasarlo temporalmente a Excel y de vuelta a Notepad++ sin que ocurran desastres, se puede intentar con lo siguiente: 1) Sustituir todos las tabuladores con un carácter que no se usa nunca, por ejemplo §. 2) Pasarlo a Excel. Si el texto está en la columna A, en la B se pone: =LEFT(REPLACE(REPLACE(REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!");FIND("§";REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!"));1;" ");FIND("!";REPLACE(REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!");FIND("§";REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!"));1;" "));1;"§");LEN(A1)) 3) Volver a Notepad++ y sustituir todos los § con tabuladores. ▲ Collapse | | |
Angel Llacuna Spain Local time: 12:56 English to Spanish TOPIC STARTER gracias Daniel ... | Jun 13, 2018 |
quisiera una forma de hacerlo directamente desde dentro de NotePad++ | | |
En mi post, donde dice "texto" pones un espacio en blanco y listo (dejando el /1), funciona bien. | | |
¡Qué nivel, Daniel! | Jun 13, 2018 |
Daniel Frisano wrote: =LEFT(REPLACE(REPLACE(REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!");FIND("§";REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!"));1;" ");FIND("!";REPLACE(REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!");FIND("§";REPLACE(CONCAT(A1;"§§");FIND("§";CONCAT(A1;"§§"));1;"!"));1;" "));1;"§");LEN(A1)) [/quote] | |
|
|
Daniel Frisano Italy Local time: 12:56 Member (2008) English to Italian + ...
Christophe Delaunay wrote: ¡Qué nivel! Es mucho menos complicado de lo que parece. Funciona así: A1 es el texto original B1 = CONCAT(A1;"§§") // añade dos § al final para evitar errores C1 = REPLACE(B1;FIND("§";B1);1;"!") // sustituye el primer § con ! D1 = REPLACE(C1;FIND("§";C1);1;" ") // sustituye el segundo § con un espacio E1 = REPLACE(D1;FIND("!";D1);1;"§") // vuelve a poner el primer § F1 = LEFT(E1;LEN(A1)) // quita los dos §§ añadidos al principio Encajando todas las funciones en una aparece ese monstruo (que nunca sabría escribir de golpe). Es mucho más elegante la solución de Rossana, sin tanto mareo... | | |
Angel Llacuna Spain Local time: 12:56 English to Spanish TOPIC STARTER gracias a todos por vuestras aportaciones ... | Jun 13, 2018 |
probaré la solución de Rossana y os digo como ha ido. Saludos desde España. | | |
Angel Llacuna Spain Local time: 12:56 English to Spanish TOPIC STARTER hola Rossana | Jun 15, 2018 |
Rossana Triaca wrote: Es un poco difícil sin saber para qué es, si la idea es sustituirlo se me ocurrió rápidamente para Notepad++: Search: (?=\t)(.*)\t Replace: \1texto Donde "texto" es por lo que quiero reemplazar el tab. La coincidencia no es exactamente el segundo tab, es más bien todo lo que está entre el primer tab que encuentra en una nueva línea y ese tab, por eso al reemplazar repito lo que encontró ("match newline" tiene que estar desactivado). Me imagino que debe haber formas más elegantes y sin duda debe ser posible hacer que ese tab sea un match individual, pero probablemente si es para sustituirlo o borrarlo esto funcione. La expresión de búsqueda sugerida no me encuentra el segundo tab de cada línea, sino que los encuentra todos ..... ..... ..... | | |
Otra prueba (creo que por la segunda imagen me doy cuenta de lo que pasa) | Jun 15, 2018 |
(\t)(.*?)(\t) \1\2 (con un espacio después del 2). Igual que el anterior, selecciona lo que está en el medio, pero como después lo copia no debería haber problema. | |
|
|
Rossana Triaca wrote: (\t)(.*?)(\t) \1\2 (con un espacio después del 2). Igual que el anterior, selecciona lo que está en el medio, pero como después lo copia no debería haber problema. Esto también encuentra todos los tabs si hay varios en la línea. Así es mejor: ^([^\t]*\t[^\t]*)\t reemplazar con: \1[lo que quieras] Explicación: ^ - inicio de línea () - memorizar contenido [^\t]* cualquier número de carácteres que no sean tab | | |
Angel Llacuna Spain Local time: 12:56 English to Spanish TOPIC STARTER gracias Rossana y Farkas por vuestras sugerencias de expresión de búsqueda ... | Jun 15, 2018 |
pero he comprobado que no son efectivas para seleccionar solamente la segunda tabulación de cada línea. En lugar de ello, se seleccionan porciones mucho mayores del texto | | |
Haz una copia del archivo y prueba la sustitución | Jun 15, 2018 |
¿Probaste la sustitución? Ninguna de las soluciones selecciona solo lo que quieres, pero sí hacen lo que necesitas porque con regex se pueden conservar los matches, es decir, estás copiando y pegando en los resultados lo que encontró, así que no te altera el texto que no quieres, solo el segundo tab. Es más fácil que pruebas las sustituciones que te dimos y veas cómo funcionan que explicarlo... | | |
Pages in topic: [1 2] > |