Trato de aplicar un estilo a una cadena de palabras que comienza un párrafo y antes de dos puntos.
Preparé una primera búsqueda Grep pero no funciona (solo coloca el cursor antes de los dos puntos sin seleccionar nada...
(?=^)*?(?=\:)
¿Alguna idea?
Al principio tienes (?=^)
. Una búsqueda anticipada positiva que mira hacia adelante para ver si un comienzo de párrafo viene después del texto que tiene antes de la búsqueda anticipada (en este caso, ninguno). Luego tienes *?
las búsquedas de Cero o Más Tiempos (Correspondencia Más Corta) de ese Positivo Lookahead . Está un poco deformado. En realidad, no seleccionas ningún personaje.
Para su enfoque de trabajo, tendría que usar una Mirada atrás positiva (?<=^)
que mira hacia atrás para ver si un Principio de párrafo viene antes del texto sin seleccionarlo. Luego use .*?
para seleccionar cualquier carácter Cero o más veces (coincidencia más corta) y una búsqueda anticipada positiva (?=:)
para finalizar la selección antes de dos puntos:
(?<=^).*?(?=:)
Pero puedes escribirlo más simple. ^
siempre no coincide, por lo que no necesita mirar atrás:
^.*?(?=:)
Janus Bahs Jacquet
^
en sí mismo no coincide, por lo que no es necesario mirar atrás en absoluto; de hecho, no hubiera pensado que mirar atrás para a^
funcionaría en absoluto. Sin embargo, su versión también coincidirá con cadenas no iniciales (es decir, si hay dos puntos, coincidirá con la cadena entre ellos), por lo que^
se necesita una.*?
es perfectamente válido: es una coincidencia de comodines no codiciosos. Incluso podría usar esto para simplificar un poco la consulta:^.*?:
coincidirá con lo mismo que^[^:]*:
(incluidos los dos puntos) y^.*?(?=:)
coincidirá con lo mismo que su^[^:]*(?=:)
(con el extra^
).Janus Bahs Jacquet
(?=^)
por definición, no puede coincidir con nada, pero aparentemente no es inválida sintácticamente, por lo que es equivalente a un grupo vacío que no coincide. Este grupo vacío (= cualquier cosa que no sea una coincidencia que no esté vacía, es decir, cualquier posición entre caracteres) se empareja de manera no codiciosa hasta una posición en la que es seguido por dos puntos (de la búsqueda hacia adelante), es decir, la posición entre el dos puntos y el carácter inmediatamente anterior. ¡Sin embargo, definitivamente no es un uso normal de GREP!lobo
*?
es bueno, pero no entiendo por qué sientes la necesidad de tenerlo^
al principio. A mí me parece que.*?(?=:)
funciona tan bien como^.*?(?=:)
. Vea aquí y observe cómo no selecciona la cadena entre los dos puntos. ¿Me estoy perdiendo de algo?lobo
Janus Bahs Jacquet
$
, por supuesto). Si realiza una búsqueda/reemplazo de todo con la misma consulta, también debería coincidir con la cadena entre los dos puntos.lobo
lobo
Janus Bahs Jacquet