Altova DiffDog 2024 Enterprise Edition

Ejemplo: reemplazar texto con ayuda de expresiones regulares

Inicio Anterior Inicio Siguiente

En este apartado explicamos cómo usar expresiones regulares para encontrar y reemplazar texto. En muchos casos la búsqueda y reemplazo de texto es una tarea sencilla que no necesita el uso de expresiones regulares. Sin embargo, a veces una operación de búsqueda y reemplazo no es suficiente y será necesario manipular el texto. Por ejemplo, imagine que tiene un archivo XML que incluye varios miles de líneas y necesita cambiar el nombre de determinados elementos de una sola vez, pero sin cambiar el contenido de los elementos. O, por ejemplo, imagine que necesita cambiar el orden de varios atributos de un elemento. En estos dos casos el uso de expresiones regulares le permitiría evitar mucho trabajo manual.

 

Ejemplo nº1: cambiar el nombre de elementos

El fragmento de código XML que aparece a continuación incluye una lista de libros. Imaginemos que nuestro objetivo es reemplazar el elemento <Category> de cada libro con el elemento <Genre>. Podemos hacerlo usando expresiones regulares.

 

<?xml version="1.0" encoding="UTF-8"?>
<books xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="books.xsd">
  <book id="1">
    <author>Mark Twain</author>
    <title>The Adventures of Tom Sawyer</title>
    <category>Fiction</category>
    <year>1876</year>
  </book>
  <book id="2">
    <author>Franz Kafka</author>
    <title>The Metamorphosis</title>
    <category>Fiction</category>
    <year>1912</year>
  </book>
  <book id="3">
    <author>Herman Melville</author>
    <title>Moby Dick</title>
    <category>Fiction</category>
    <year>1851</year>
  </book>
</books>

 

Estos son los pasos que debe seguir:

 

1.Pulse Ctrl+H para abrir el cuadro de diálogo "Buscar y reemplazar".

2.Haga clic en el botón Usar expresiones regulares _ic_find_regex.

3.En el campo Buscar introduzca este texto: <category>(.+)</category>. Esta expresión regular encuentra todos los elementos category, que aparecerán resaltados.

inc-RegexExample01

Para encontrar el contenido de cada elemento (que desconocemos), usamos la expresión etiquetada (.+) . La expresión (.+) indica que se deben "buscar una instancia o varias de cualquier carácter (.+) y recordar este resultado". Como podrá ver en el paso siguiente, más adelante necesitaremos la referencia a la expresión etiquetada.

 

4.En el campo Reemplazar introduzca este texto: <genre>\1</genre> . Esta expresión regular define el texto de reemplazo. Observe que usa \1 para hacer referencia inversa a la expresión etiquetada del campo Buscar. En otras palabras, en este contexto \1 significa "el contenido del elemento <category> actual que coincida con la búsqueda".

5.Haga clic en Reemplazar todos _ic_regex_replaceall y observe el resultado. Todos los elementos category se reemplazaron con genre, tal y como era nuestra intención.

 

Ejemplo nº2: cambiar el orden de los atributos

El fragmento de código XML que aparece a continuación incluye una lista de producto. Cada producto tiene dos atributos llamados id y size. Imaginemos que nuestro objetivo es cambiar el orden de los atributos id y size de cada elemento product (es decir, en todos los elementos product el atributo size debe aparecer antes de id). Podemos hacerlo usando expresiones regulares.

 

<?xml version="1.0" encoding="UTF-8"?>
<products xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="products.xsd">
  <product id="1" size="10"/>
  <product id="2" size="20"/>
  <product id="3" size="30"/>
  <product id="4" size="40"/>
  <product id="5" size="50"/>
  <product id="6" size="60"/>
</products>

 

Estos son los pasos que debe seguir:

 

1.Pulse Ctrl+H para abrir el cuadro de diálogo "Buscar y reemplazar".

2.Haga clic en el botón Usar expresiones regulares _ic_find_regex.

3.En el campo Buscar introduzca este texto: <product id="(.+)" size="(.+)"/> . Esta expresión regular busca un elemento product en el documento XML. Observe que, para encontrar el valor de cada atributo (que desconocemos) se usa la expresión etiquetada (.+) dos veces. La expresión etiquetada (.+) encuentra el valor de cada atributo (que se supone será una instancia o varias de cualquier carácter, es decir .+).

4.En el campo Reemplazar introduzca este texto: <product size="\2" id="\1"/> . Esta expresión regular contiene el texto de reemplazo para cada uno de los elementos product que se encontraron. Observe que usa las referencias \1 y \2, que corresponden a las expresiones etiquetadas del campo Buscar. En otras palabras, \1 significa "el valor del atributo id" y \2 significa "el valor del atributo size".

inc-RegexExample02

5.Haga clic en Reemplazar todos _ic_regex_replaceall y observe el resultado. Todos los elementos product del documento XML se reemplazaron de modo que el atributo size aparezca delante del atributo id.

© 2017-2023 Altova GmbH