Reemplazo de búsqueda de expresión regular en Sublime Text 2

Resuelto hackerhasid asked hace 12 años • 6 respuestas

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.

hackerhasid avatar Aug 06 '12 03:08 hackerhasid
Aceptado

Por lo general, una referencia inversa es o $1( \1barra 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+)
Bobulous avatar Aug 05 '2012 20:08 Bobulous

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.

CrnaStena avatar Dec 05 '2012 21:12 CrnaStena

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, $2o \1, \2etc.

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: $1pxomargin: \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]*)emcadena de búsqueda (entre paréntesis). Encierre el segmento coincidente deseado (por ejemplo, $1o \1) entre ( )paréntesis de la siguiente manera:

  • Buscar: margin: ([0-9]*)em(entre paréntesis)
  • Reemplazar por: margin: $1pxomargin: \1px
  • Resultado:
    margin: 10px;
    margin: 2px;

EJEMPLO DE CASO INCORRECTO: Uso margin: [0-9]*emde 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 $1o \1:

  • Buscar: margin: [0-9]*em(sin paréntesis)
  • Reemplazar por: margin: $1pxomargin: \1px
  • Resultado:
    margin: px; /* `$1` is undefined */
    margin: px; /* `$1` is undefined */
Hrvoje Golcic avatar Aug 07 '2014 12:08 Hrvoje Golcic

Tenga en cuenta que si utiliza más de 9 grupos de captura, deberá utilizar la sintaxis ${10}.

$10o \10o no\{10} funcionará .

Andreas Haferburg avatar Sep 07 '2016 16:09 Andreas Haferburg

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 $1para usar el primer grupo capturado.

Y como las imágenes valen más que las palabras...

Antes: antes de buscar/reemplazar

Después: después de buscar/reemplazar

Blairg23 avatar Jun 26 '2019 21:06 Blairg23