Expresiones regulares

From Apache OpenOffice Wiki
Jump to: navigation, search

Editing.png Esta página está en estado borrador.


Introducción

En un artículo anterior se comentarios las opciones básicas de búsqueda dentro de Apache OpenOffice. Aquí comentaremos una de las opciones avanzadas: las expresiones regulares.

Con expresiones regulares (de ahora en más, ExpReg) es posible localizar textos indefinidos siguiendo un patrón. Por ejemplo, la expresión


 [:number:]

encontrará cualquier dígito,

 [:number:]+

encontrará un entero arbitrario y

 [:number:]+\,?[:number:]*

encontrará un número arbitrario que podría (o no) tener una parte decimal separada por una coma.

Como se puede ver de estos ejemplo, en las ExpReg varios caracteres tienen un significado especial. En este artículo las principales características del sistema ICU utilizado por Apache OpenOffice serán comentadas.

Caracteres especiales

Como ya hemos comentado, varios caracteres tienen un significado particular dentro de la expresión regular. Estos caracteres son todos los tipos de paréntesis, corchetes y llaves, la barra invertida, el punto, el signo de pesos, etcétera. Para buscar por estos caracteres especiales es necesario «escaparlos» con una barra invertida: por ejemplo, para buscar por [ se necesita escribir

 \[

y, por supuesto, para buscar la barra invertida dos barras invertidas deben ser escritas

 \\

El punto

El punto puede utilizarse para encontrar un carácter genérico.

 h.y

encontrará hoy, hay, huy... incluso hXy.

La expresión

 [:any:]

es equivalente al punto.

Signo de interrogación

Se utiliza para encontrar cero o una instancias del carácter anterior. Por ejemplo

 buscas?

encontrará tanto busca como buscas.

El más

Se utiliza para encontrar una o más instancias del carácter anterior.

El asterisco

Encuentra un número arbitrario de instancias, incluso cero:

 hay*

encontrará hay, hayy, hayyyyyyyy...

Llaves

Pueden usarse para indicar el número de repeticiones. Por ejemplo,

 ou{2,5}ch

encontrará ouuch, ouuuch, ouuuuch, ouuuuuch, pero no ouch!

Usando solo un número se encontrará ese exacto número de instancias Using only one number will match the exact number

 ou{3}ch

encontrará solo ouuuch, mientras que

 ou{3,}ch

encontrará la palabra con al menos tres u.

Acento circunflejo

El signo ^ tiene varios significados dependiendo del contexto. Por un lado, puede ser utilizado para encontrar cualquier cosa al principio de un párrafo. Por ejemplo, en el párrafo

 El texto en el libro

la expresión

 ^el

encontrará el primer «el», pero no el segundo.

Dentro de corchetes, el signo ^ sirve para negar un carácter. Por ejemplo,

 [^a]

encontrará cualquier carácter que no sea una a, mientras que

 [^ar]

encontrará un carácter que no sea ni a ni r.

El signo $

El significado de este signo también depende del contexto.

Utilizado solo, encontrará quiebres de párrafo pero utilizado con otros caracteres encontrará esos caracteres al final del párrafo. Por ejemplo, en el párrafo

  Tu libro está debajo de este otro libro

la expresión

  libro$

encontrará la segunda instancia de libro, pero no la primera.

En el campo «reemplazar por» el signo $ tiene otro significado que veremos más adelante.

La barra invertida \

Como hemos ya comentado, la barra invertida puede usarse para «escapar» símbolos especiales para así poder buscar por ellos, pero también puede darle un significado diferente a símbolos normales. Por ejemplo

 \b

buscará por un límite de palabra:

 \bjus

encontrará las primeras tres letras de justo, justicia, justificar... pero no ajustar mientras que

 mo\b

encontrará las últimas dos letras de cómo, tómo... pero no monitor.

La expresión

 \w

encontrará cualquier carácter dentro de una palabra.

 \W

(con la W en mayúscula) encontrará un carácter que no es un «elemento de palabra» (un espacio, un signo de pregunta... etcétera).

 \t

encontrará un tabulador

 \n

encontrará un quiebre de línea, pero en el campo de reemplazar por insertará un quiebre de párrafo (el mismo que se buscaba con $).

La combinación \u seguida por un número exadecimal puede utilizarse para buscar un carácter específico a través de su código unicode. Por ejemplo

 \u03b4

encontrará el carácter griego delta δ.

La barra vertical |

Puede utilizarse para encontrar alternativas. Por ejemplo

 dis[t|c]o

encontrará tanto disto como disco. Esto puede utilizarse con más opciones del tipo [a|b|c].

Los corchetes en la expresión anterior son utilizados para limitar la selección, ya que escribir dist|co buscaría «dist» o «co».

Grupos y referencias

Agrupando expresiones entre paréntesis, como

 (expresión1)(expresión2)

nos da la posibilidad de llamar cada expresión más tarde en la ExpReg con una barra invertida seguida del número de la expresión: \1 llamará la primer expresión, \2 la segunda, etcétera.

Por ejemplo, la expresión

 \b(\w+) *\1\b

(notar el espacio entre (w+) y el *) puede utilizarse para encontrar palabras repetidas: ambos \b encuentran un límite de palabra, \w+ uno o más elementos de palabra mientras que \1 llama esos elementos de palabra encontrados en el grupo(\w+).

Documentation note.png Una alternativa que busca palabras duplicadas con un signo de puntuación entre ellas podría ser
 (\b\w+\b)\W+\1\b

o bien

 \b(\w+)[^[:alpha:]]*\1\b

Nótese que la primer expresión falla en AOO 3.4.1 debido a un error resuelto en la versión 4.0.

Para llamar el texto encontrado por el grupo en el campo Reemplazar por, es necesario utilizar el signo $ seguido por el número de la expresión en lugar de la barra invertida.

Por ejemplo, buscando por

 \b(\w+) *\1\b

y reemplazando por

 $1

se eliminará cualquier palabra duplicada en el texto.

Otras expresiones

  [:alpha:]

encontrará cualquier carácter ASCII, pero no caracteres acentuados o números, para esto se necesita utilizar

  [:any:]

o el punto, como se ha visto anteriormente.

  [:number:]

o

 [:digit:]

encontrará un dígito simple.

  [:space:]

encontrará cualquier tipo de espacio, incluso los de no separación.

Es posible utilizar un guión junto con un par de corchetes para indicar rangos. Por ejemplo

 [0-8]

encontrará cualquier dígito excepto el 9.

En el campo reemplazar por,

  &

insertará la misma cadena de texto encontrada por la ExpReg.

Límites en el uso de expresiones regulares

Las ExpReg solo pueden buscar dentro de un párrafo: no es posible utilizarlas por ejemplo para encontrar dos párrafos buscando por un particular final del primero y un particular comienzo del segundo.

Las marcas de párrafo no pueden encontrarse en combinación con otros textos. Por ejemplo, en un párrafo del tipo

 Un breve ejemplo. Este es el final del texto.

la expresión

 \.$

encontrará solo el punto final, no el quiebre de párrafo.

Más allá de las expresiones ya indicadas (&, \n, la llamada a grupos con la barra invertida seguida de un número), el campo «Reemplazar por» no acepta expresiones regulares.

Expresiones regulares en Writer

En Writer, con Editar → Buscar y Reemplazar o  Ctrl  +  B  se abrirá el menú de Buscar y reemplazar. Allí, con un clic en  Más opciones  se tiene la opción de habilitar la herramienta de ExpReg:

ES-ExpReg-Writer.png

Como puede verse de la captura de pantalla, es posible combinar las ExpReg con otras opciones como el  Formato .

Documentation caution.png Existe un error en 3.4.1, corregido en Apache OpenOffice 4.0, que hace que la combinación de expresiones regulares con las opciones de formato no funcionen correctamente (se selecciona no solo el texto en cursiva, como indicado en la captura de pantalla, sino hasta el final del párrafo). Como ya se ha dicho, el problema está corregido en Apache OpenOffice 4.0.

Expresiones Regulares en Calc

EN PREPARACIÓN

Buscar y reemplazar en el menú de búsqueda

EN PREPARACIÓN

Expresiones regulares en fórmulas

EN PREPARACIÓN

Expresiones Regulares en Impress

EN PREPARACIÓN

Más información

http://userguide.icu-project.org/strings/regexp

Personal tools