OT - una de expresiones regulares

Hola Expertos,

tengo una pequeña duda con expresiones regulares, estoy haciendo un
proyecto
en Rails donde necesito limpiar un código html de caracteres que no sean
letras , pero exceptuando los ; y los &,
ya que necesito que los caracteres de html escapados queden en el codigo
por
ej un " más"
¿alguna idea?

Atte.
Miguel Michelson Martinez

On Wed, Oct 1, 2008 at 11:43 PM, Miguel M.
[email protected] wrote:

tengo una pequeña duda con expresiones regulares, estoy haciendo un proyecto
en Rails donde necesito limpiar un código html de caracteres que no sean
letras , pero exceptuando los ; y los &,
ya que necesito que los caracteres de html escapados queden en el codigo por
ej un " más"
¿alguna idea?

Si tienes

más aquí!

var x = 5;

Qué ha de quedar?

tengo una pequeña duda con expresiones regulares, estoy haciendo un
proyecto en Rails donde necesito limpiar un código html de
caracteres que no sean letras , pero exceptuando los ; y los &, ya
que necesito que los caracteres de html escapados queden en el
codigo por ej un " más" ¿alguna idea?

Mi recomendación sería que no lo hagas con expresiones regulares.
Este es el tipo de problema que parece más sencillo de lo que
formalmente es.

Si tenés que quitar el HTML hacelo con un parser completo de HTML, por
ejemplo: Hpricot[1].

Si luego, tenés que codificar el texto a entidades HTML, usá
HTMLEntities[2] (o algo parecido; html_escape de ActionPack hace
demasiado poco para lo que querés).

[1]. http://code.whytheluckystiff.net/hpricot

[2]. http://htmlentities.rubyforge.org

El día 2 de octubre de 2008 0:03, Adrián Mugnolo [email protected]
escribió:> Si tenés que quitar el HTML hacelo con un parser completo de HTML, por

ejemplo: Hpricot[1].

Si luego, tenés que codificar el texto a entidades HTML, usá
HTMLEntities[2] (o algo parecido; html_escape de ActionPack hace
demasiado poco para lo que querés).

[1]. http://code.whytheluckystiff.net/hpricot

[2]. http://htmlentities.rubyforge.org

Estoy con Adrián… yo añadiría tidy:

http://tidy.sourceforge.net/

Seguro que tiene algo para enchufarlo con ruby

f.

Hola, gracias a todos por el interés y la ayuda !

Asi es, estoy usando hpricot para acceder al html y extraer el html de
paginas,
Les explico un poco de que se trata:
saco los metatags , links y parrafos de la pagina examinada, Los que son
tags ‘script’,‘css’,‘link’,‘style’ quedan como tags ignorados;
luego el html que queda, lo llimpio con la siguiente expresion:

html = doc.to_s.gsub(/</?[^>]*>/, “”)

asi me quedan los párrafos limpios de tags html, esos parrafos o frases
los
estoy guardando en la base de datos y en cada frase voy sacando las
palabras
para dejarlas como tags (un tag_list de acts_as_taggable), mi problema
aqui
es que muchas frases tienen caracteres extraños que no vale la pena
meter en
el tag_list, pero, por otro lado, también hay caracteres importantes
como
los escapes de html, es por esto que necesito hacer una expresión que me
permita los caracteres ‘&’ y ‘;’ y ‘[a-zA-Z0-9]’ , seria como un ‘\w’
pero
permitiendo algunos caracteres raros.

espero se entienda la idea

Saludos a todos

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

2008/10/1 Xavier N. [email protected]

On Thu, Oct 2, 2008 at 2:23 AM, Miguel M.
[email protected] wrote:

asi me quedan los párrafos limpios de tags html, esos parrafos o frases los
estoy guardando en la base de datos y en cada frase voy sacando las palabras
para dejarlas como tags (un tag_list de acts_as_taggable), mi problema aqui
es que muchas frases tienen caracteres extraños que no vale la pena meter en
el tag_list, pero, por otro lado, también hay caracteres importantes como
los escapes de html, es por esto que necesito hacer una expresión que me
permita los caracteres ‘&’ y ‘;’ y ‘[a-zA-Z0-9]’ , seria como un ‘\w’ pero
permitiendo algunos caracteres raros.

No acabo de entender la cosa del todo, pero conoces hpricot y lo estas
usando al menos en parte del problema, asi que voy a por la expresion
regular. Seria algo asi:

str.gsub(/[^\w&;]/, ‘’)

La clave es [^…] que significa “todo lo que NO este en esta clase de
caracteres”.

Con el $KCODE railero á, ö, ß, ç, etc. pertenecen a \w, pasan el
filtro, y quedan en el tag.

Si solo quisieras ASCII en los tags puedes o bien normalizar antes
(busca un mail de Aitor sobre “parameterize” en los archivos):

str.parameterize.gsub.(/[^a-zA-Z0-9&;]/, ‘’)

o bien perderlos.

Un parser hay que usarlo casi seguro, pero creo que hay que esperar a
que defina un poco mejor el problema con el ejemplo que envie ya que
no se ha dicho nada de limpiar tags HTML. Se quieren limpiar
no-letras.

Yo sospecho que se quiere limpiar el contenido de algun modo, es
decir, dejar la estructura intacta y limpiar el texto. Hay que ver si
es esto y si cosas como acentos o signos de puntuacion han de pasar,
ya que letras no son. Tambien hay que ver que se hace con JavaScript,
handlers, anchors, comentarios HTML, etc.

Esperemos!

Atte.
Miguel Michelson Martinez

www.artenlinea.cl

Hola Xavier

gracias por responder,

2008/10/2 Xavier N. [email protected]

en

el tag_list, pero, por otro lado, también hay caracteres importantes como
los escapes de html, es por esto que necesito hacer una expresión que me
permita los caracteres ‘&’ y ‘;’ y ‘[a-zA-Z0-9]’ , seria como un ‘\w’
pero
permitiendo algunos caracteres raros.

No acabo de entender la cosa del todo, pero conoces hpricot y lo estas
usando al menos en parte del problema, asi que voy a por la expresion
regular. Seria algo asi:

str.gsub(/[^\w&;]/, ‘’)

Esto era lo que necesitaba :smiley:

str.parameterize.gsub.(/[^a-zA-Z0-9&;]/, ‘’)

o bien perderlos.

muchas gracias