Reemplazo de búsqueda de expresión regular en Sublime Text 2
Estoy buscando reemplazar la búsqueda con expresiones regulares en Sublime Text 2. La documentación sobre esto es bastante anémica. Específicamente, quiero hacer un reemplazo en grupos, algo así como convertir este texto:
Hello my name is bob
Y este término de búsqueda:
Encontrar que:my name is (\w)+
Reemplazar con:my name used to be $(1)
El término de búsqueda funciona bien, pero no puedo encontrar una manera de reemplazarlo usando el grupo de expresiones regulares.
Por lo general, una referencia inversa es o $1
( \1
barra invertida uno) para el primer grupo de captura (la primera coincidencia de un patrón entre paréntesis) y, de hecho, Sublime admite ambas sintaxis. Entonces prueba:
my name used to be \1
o
my name used to be $1
También tenga en cuenta que su patrón de captura original:
my name is (\w)+
es incorrecto y solo capturará la letra final del nombre en lugar del nombre completo. Debes utilizar el siguiente patrón para capturar todas las letras del nombre:
my name is (\w+)
Por cierto, en la pregunta anterior:
Para:
Hello, my name is bob
Encuentra parte:
my name is (\w)+
Con pieza de repuesto:
my name used to be \1
Volvería:
Hello, my name used to be b
Cambie buscar parte a:
my name is (\w+)
Y reemplazar será lo que esperas:
Hello, my name used to be bob
Si bien (\w)+ coincidirá con "bob", no es la agrupación que desea reemplazar.
Importante: utilice los
( )
paréntesis en su cadena de búsqueda
Si bien la respuesta anterior es correcta, ¡hay algo importante que destacar! Todos los segmentos coincidentes en su cadena de búsqueda que desee usar en su cadena de reemplazo deben estar entre ( )
paréntesis ; de lo contrario, estos segmentos coincidentes no serán accesibles para variables definidas como $1
, $2
o \1
, \2
etc.
Por ejemplo, queremos reemplazar 'em' con 'px' pero conservar los valores de los dígitos:
margin: 10em; /* Expected: margin: 10px */
margin: 2em; /* Expected: margin: 2px */
- Cuerda de repuesto:
margin: $1px
omargin: \1px
- Cadena de búsqueda (CORRECTA):
margin: ([0-9]*)em
// con paréntesis - Cadena de búsqueda (INCORRECTA):
margin: [0-9]*em
EJEMPLO DE CASO CORRECTO: Usando margin: ([0-9]*)em
cadena de búsqueda (entre paréntesis). Encierre el segmento coincidente deseado (por ejemplo, $1
o \1
) entre ( )
paréntesis de la siguiente manera:
- Buscar:
margin: ([0-9]*)em
(entre paréntesis) - Reemplazar por:
margin: $1px
omargin: \1px
- Resultado:
margin: 10px;
margin: 2px;
EJEMPLO DE CASO INCORRECTO: Uso margin: [0-9]*em
de cadena de búsqueda (sin paréntesis). El siguiente patrón de expresiones regulares coincidirá con las líneas deseadas, pero los segmentos coincidentes no estarán disponibles en la cadena reemplazada como variables como $1
o \1
:
- Buscar:
margin: [0-9]*em
(sin paréntesis) - Reemplazar por:
margin: $1px
omargin: \1px
- Resultado:
margin: px; /* `$1` is undefined */
margin: px; /* `$1` is undefined */
Tenga en cuenta que si utiliza más de 9 grupos de captura, deberá utilizar la sintaxis ${10}
.
$10
o \10
o no\{10}
funcionará .
Al mirar el artículo de Sublime Text Unofficial Documentation sobre Buscar y reemplazar , parece que +(.+)
es el grupo de captura que quizás desee... pero yo personalmente lo usé (.*)
y funcionó bien. Para REEMPLAZAR en la forma en que lo dice, es posible que le guste esta conversación en los foros , específicamente esta publicación que dice simplemente usar $1
para usar el primer grupo capturado.
Y como las imágenes valen más que las palabras...
Antes:
Después: