Captura

Captura

Necesito ayuda con Buscar y reemplazar en Notepad++.

Ejemplo:

$250 'Hola 1' Toma '____'

$500 'Hola 2' Toma '____'

$1000 'Hola 3' Toma '____'

Imagine que hay miles de estas entradas hasta 'Hola 9999'.

Quiero reemplazar '____' con un número sin cambiar 'Hola 1' o 'Hola 2'.

Me gustaría que el resultado fuera:

$250 'Hola 1' Toma '250'

$500 'Hola 2' Toma '500'

$1000 'Hola 3' Toma '1000'

¿Cómo puedo hacer esto? Esperaría usar una expresión regular.

Respuesta1

Marque la casilla de verificación de expresión regular y use:

Buscar:

\$(.*?) (.*?) Take '(.*?)'

Reemplazar:

\$$1 $2 Take '$1'

Esto buscará una línea que básicamente se parece a esta:

$anything anything Take 'anything'  

.*? significa cualquier carácter excepto una nueva línea en expresiones regulares.
¿Envolver paréntesis alrededor de un grupo de captura como .*? almacenará su contenido en una variable que es $n donde n es el n-ésimo grupo.

Entonces después de la búsqueda tendremos tres variables:
$1 = 250 $2 = 'Hola 1' $3 = ___

Con el reemplazo, reemplazamos toda la línea real con \$ (escapar del signo de dólar lo convierte en un $ literal y no en una variable).
Toda la línea se reemplaza por $$1 $2 '$1'
Como puede ver, usamos nuevamente la variable $1, que es el primer grupo de captura.


Soy bastante nuevo en SO, lo siento si mis explicaciones no son tan buenas.

Respuesta2

Esta debería ser la sintaxis de Notepad++, después de haber seleccionado el botón de opción "Expresión regular" en la parte inferior del cuadro de diálogo Buscar/Reemplazar:

Find:  (\$(\d+).*Take\s+').*(')
Replace:  \1\2\3

Explicación:

Variables de grupo entre paréntesis en orden contando de izquierda a derecha:

(\$(\d+).*Take\s+').*(')
|--------1--------|
   |-2-|             |3|

\$ : significa buscar el signo de dólar

\d+: significa buscar dígitos, "+" al final significa uno o más (es decir, DEBE ser al menos un dígito).

.* : "." significa CUALQUIER carácter y "*" significa uno o más.

Tomar: es específicamente la palabra Texto.

\s+: significa caracteres de espacio y "+" significa uno o más.

...

Ahora, como todo está agrupado EXCEPTO los últimos caracteres entre comillas simples, entonces:

\1\2\3

Simplemente coloca el primer y tercer paréntesis, con el segundo entre ellos (donde el segundo paréntesis es el valor en dólares).

Respuesta3

Prueba esto

Primero active las expresiones regulares

Configuración de Notepad ++ para activar expresiones regulares

https://regex101.com/r/aW4gG2/2

Buscar: (\$\d+)(.*Take ')(.*)(')
Reemplazar:\1\2\1\4

Captura

Hay cuatro grupos en esta expresión.

Aporte:$250 'Hello 1' Take '____'

Grupo 1
(\$d+)= $250- esto dice comenzar con $ (escapó para que sea literal) luego los dígitos ( \d) 1 o más para que se detenga en el último dígito, ya sea 3 o 15. En su ejemplo, estaban al comienzo de la línea, pero yo no asumir que. Sin embargo, si SÍ comienzan la línea, es posible que desees agregar una opción ^para hacerlo.^(\Sd+)

Grupo 2
(.*Take ')= 'Hello 1' Take '- la expresión dice .*que significa cualquier carácter cualquier cantidad de veces, por lo que toma todo hasta que ve Takey luego toma Take 'porque lo escribí y se detiene allí.

grupo 3
(.*)= - ____esto toma el espacio interno, básicamente toma cualquier cosa 0 o más veces. En este caso, todo son guiones bajos, pero escrito capturaría todo lo que tengas allí. Tomaría todo hasta el final de las líneas, excepto que tengo algo a continuación que le indica cuándo detenerse.

grupo 4
(')= - 'esto le dice al grupo 3 que se detenga en la 'marca. también captura la 'marca en su propio grupo para reorganizarla.

Sustitución

\1\2\1\4

Los grupos están numerados a partir del paréntesis abierto, pero en este caso todo es lineal sin anidamiento, por lo que es bastante obvio. \1\2\3\4Dejaría todo como está. Pero queremos reemplazar el tercer grupo con el primer grupo, así que... \1\2\1\4funciona. Uno de los puntos clave aquí fue asegurarnos de capturar ese cuarto grupo para reemplazarlo al final. Más allá de eso, nada demasiado complicado.

Ejecución

Así que simplemente configúrelo en su búsqueda y reemplazo y luego presione reemplazar todo y eso debería solucionarlo.

Editar

Noté que querías eliminar el $ en tu reemplazo, por lo que necesitas hacer algunos cambios menores a mis sugerencias iniciales, aunque es básicamente lo mismo.

Aporte:$250 'Hello 1' Take '____'

Buscar: (\$)(\d+)(.*Take ')(.*)(')
Reemplazar:\1\2\3\2\5

información relacionada