busqueda con Regular expresion

23/05/2005 - 17:21 por andy O | Informe spam
Hola a todos.

Necesito hacer lo siguiente:

Cadena = "Una de las enciclopedias escolares en línea más completas de la
red.";
buscar = "Enciclopedias"


static Regex expresion = new Regex("( + "buscar + ")+");
bool existe = expresion.IsMatch(Cadena)

Eso funciona, pero que sucede si buscar = "e" entonces buscaría todas las
e, y eso es lo que no quiero.
Todas estas palabras coincien con el patrón(enciclopedias) (escolares )
(línea ) (completas ) (de ) (red)

Pero lo que quiero es que busque por palabras y no por sub cadena.
ahh, y que sea indiferente mayusculas y minúsculas: Enciclopedias o
enciclopedias.

Espero que me ayuden.
Gracias

Preguntas similare

Leer las respuestas

#1 andy O
24/05/2005 - 00:15 | Informe spam
Braulio

Lo que quiero hacer es la función buscar palabra exacta al estilo del wordpad
Sobre el usar el split uhmm que pasa si son muchas palabras, ¿Acaso no
consumirá muchos recursos?


*Enciclopedia[^\s]\s*


Buena tu idea pero he probado con buscar ="a"
Buscaría todo las subcadenas que terminan en a antes del espacio en blanco


Esto no te cubiriría el caso de final de cadena, que sería algo así como:
*Encilopedia[^\s]*$



Ahora lo que queda es pensar como juntar ambos patrones.
y mejorar el primero.
bueno, seguiré pensando.

Esperaré otras ayudas.
Gracias de toda manera.
Respuesta Responder a este mensaje
#2 Braulio Diez
24/05/2005 - 00:15 | Informe spam
Hola,

No estoy muy seguro de si lo que quieres hacer sería optimo con
expresiones regulares, si mal no he entedido lo que quieres hacer es:

Extraer las palabras de un parrafo que contengan una subcadena:

¿ No sería mejor trozear el parrafo en palabras ? (para ello podrías hacer
un split), y después o bien buscar por un substr o aplicando la expresión
regular y extraer que palabras cumplen con tener esa subcadena ?

De hacerlo con expresiones regulares, un comienzo podría ser:

*Enciclopedia[^\s]\s*

Esto no te cubiriría el caso de final de cadena, que sería algo así como:

*Encilopedia[^\s]*$

En el primero le dices que te busque la subcadena enciclopedia en cada
palabra (tomando como separador el espacio en blanco), todavía le queda
trabajo por hacer a esta RegEx, ¿ Alguien se anima ? :-)

Saludos
Braulio

"andy O" escribió:

Hola a todos.

Necesito hacer lo siguiente:

Cadena = "Una de las enciclopedias escolares en línea más completas de la
red.";
buscar = "Enciclopedias"


static Regex expresion = new Regex("( + "buscar + ")+");
bool existe = expresion.IsMatch(Cadena)

Eso funciona, pero que sucede si buscar = "e" entonces buscaría todas las
e, y eso es lo que no quiero.
Todas estas palabras coincien con el patrón(enciclopedias) (escolares )
(línea ) (completas ) (de ) (red)

Pero lo que quiero es que busque por palabras y no por sub cadena.
ahh, y que sea indiferente mayusculas y minúsculas: Enciclopedias o
enciclopedias.

Espero que me ayuden.
Gracias

Respuesta Responder a este mensaje
#3 Braulio Diez
24/05/2005 - 09:21 | Informe spam
Hola,

Juntar las dos expersiones no es complicado, creo que era con caracter | :

(*Enciclopedia[^\s]\s*|*Encilopedia[^\s]*$)

Mmm lo del split si es para texto grandes, no tienes porque usar un
split, si no que podía ir marcando desde un delimitador de espacio al
siguiente, no te haría falta guardar todas las subcadenas, si no la actual
que estás procesando.

La verdad es que no se que sería más rápido si la expresión regular o el
buscarlo directamente.

Saludos
Braulio

"andy O" wrote:

Braulio

Lo que quiero hacer es la función buscar palabra exacta al estilo del wordpad
Sobre el usar el split uhmm que pasa si son muchas palabras, ¿Acaso no
consumirá muchos recursos?


> *Enciclopedia[^\s]\s*
Buena tu idea pero he probado con buscar ="a"
Buscaría todo las subcadenas que terminan en a antes del espacio en blanco


> Esto no te cubiriría el caso de final de cadena, que sería algo así como:
> *Encilopedia[^\s]*$

Ahora lo que queda es pensar como juntar ambos patrones.
y mejorar el primero.
bueno, seguiré pensando.

Esperaré otras ayudas.
Gracias de toda manera.




Respuesta Responder a este mensaje
#4 andy O
24/05/2005 - 16:51 | Informe spam
Gracias Braulio.

Con tu idea puede hacer el patrón que quería:

"\s+encarta\s+|\s+encarta$|^encarta$|^encarta\s+"

Esto busca palabra a palabra y no como subcadena.
A ver si la pruebas si tiene fallas.




"Braulio Diez" escribió:

Hola,

Juntar las dos expersiones no es complicado, creo que era con caracter | :

(*Enciclopedia[^\s]\s*|*Encilopedia[^\s]*$)

Mmm lo del split si es para texto grandes, no tienes porque usar un
split, si no que podía ir marcando desde un delimitador de espacio al
siguiente, no te haría falta guardar todas las subcadenas, si no la actual
que estás procesando.

La verdad es que no se que sería más rápido si la expresión regular o el
buscarlo directamente.

Saludos
Braulio

"andy O" wrote:

> Braulio
>
> Lo que quiero hacer es la función buscar palabra exacta al estilo del wordpad
> Sobre el usar el split uhmm que pasa si son muchas palabras, ¿Acaso no
> consumirá muchos recursos?
>
>
> > *Enciclopedia[^\s]\s*
> Buena tu idea pero he probado con buscar ="a"
> Buscaría todo las subcadenas que terminan en a antes del espacio en blanco
>
>
> > Esto no te cubiriría el caso de final de cadena, que sería algo así como:
> > *Encilopedia[^\s]*$
>
> Ahora lo que queda es pensar como juntar ambos patrones.
> y mejorar el primero.
> bueno, seguiré pensando.
>
> Esperaré otras ayudas.
> Gracias de toda manera.
>
>
>
>
Respuesta Responder a este mensaje
#5 Braulio Diez
25/05/2005 - 09:58 | Informe spam
Hola,

Parece que es correcta, pero mejor asegurarse, haz unos cuantos ficheros
de prueba para ir testeando que cubran todas las pobilidades.

Bueno, para busquedas se quedan algunas lagunas:

- ¿ Que pasa con Mayusculas y minusculas ? es lo mismo "Encarta"
que "encarta".

- ¿ Que pasa con tildes y demás ?, por ejemplo si digo que busqeu
"Capitan", debería darme por valido "Capitan" (sin tilde.)

Para estas busquedas en SQL Server hay una funcionalidad que se llama
"Full Text Search" que sorprendentemente tira de motores externos, ya sea del
sistema operativo, o de third-parties para formatos concretos (por ejemplo
pdf). Lo que no he visto es como usar esos motores (por ejemplo el que trae
el sistema operativo) desde un programa normal.

Un saludo
Braulio

"andy O" wrote:

Gracias Braulio.

Con tu idea puede hacer el patrón que quería:

"\s+encarta\s+|\s+encarta$|^encarta$|^encarta\s+"

Esto busca palabra a palabra y no como subcadena.
A ver si la pruebas si tiene fallas.




"Braulio Diez" escribió:

> Hola,
>
> Juntar las dos expersiones no es complicado, creo que era con caracter | :
>
> (*Enciclopedia[^\s]\s*|*Encilopedia[^\s]*$)
>
> Mmm lo del split si es para texto grandes, no tienes porque usar un
> split, si no que podía ir marcando desde un delimitador de espacio al
> siguiente, no te haría falta guardar todas las subcadenas, si no la actual
> que estás procesando.
>
> La verdad es que no se que sería más rápido si la expresión regular o el
> buscarlo directamente.
>
> Saludos
> Braulio
>
> "andy O" wrote:
>
> > Braulio
> >
> > Lo que quiero hacer es la función buscar palabra exacta al estilo del wordpad
> > Sobre el usar el split uhmm que pasa si son muchas palabras, ¿Acaso no
> > consumirá muchos recursos?
> >
> >
> > > *Enciclopedia[^\s]\s*
> > Buena tu idea pero he probado con buscar ="a"
> > Buscaría todo las subcadenas que terminan en a antes del espacio en blanco
> >
> >
> > > Esto no te cubiriría el caso de final de cadena, que sería algo así como:
> > > *Encilopedia[^\s]*$
> >
> > Ahora lo que queda es pensar como juntar ambos patrones.
> > y mejorar el primero.
> > bueno, seguiré pensando.
> >
> > Esperaré otras ayudas.
> > Gracias de toda manera.
> >
> >
> >
> >
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida