Expresiones Regulares

10/07/2006 - 03:07 por Chema | Informe spam
Hola!!!
Necesito saber si se puede hacer lo siguiente con 'expresiones regulares'

Estoy buscando una cadena en un texto y esa cadena se puede repetir más de
una vez. Quiero que se busque tantas veces sea necesario HASTA que pase una
palabra.

Ejemplo:
cadena a buscar=pepe
En este texto:
hola estoy en casa de pepe. Máñana me iré a comer a casa de pepe. Cuando
vuelvas llama a pepe por TELEFONO. pepe está enfermo. pepe se fue a correr.

Quiero buscar todos los pepe que hay ANTES de la palabra TELEFONO.
pepe está enfermo. pepe se fue a correr.
Ya no haria falta buscar en esas dos frases.

Se puede hacer¿? Esque le llevo dando vueltas un par de semana y no consigo
sacarlo.

Les estaria muy agradecido. Un saludo!! y Gracias!
 

Leer las respuestas

#1 Patxi Sanz
10/07/2006 - 13:20 | Informe spam
Hola Chema:

Una posible solución sería la siguiente función:

'Función para buscar un texto dentro de otro, siempre y cuando no se llegue
a la
'posición donde se encuentre otro texto indicado.
'Parámetros:
' - strTextoABuscar: Texto que deseamos buscar.
' - strTextoDondeBuscar: Texto donde vamos a realizar las búsquedas.
' - strUltimaPalabra: Palabra o texto incluido en strTextoDondeBuscar, a
partir
' del cual no deseamos realizar más búsquedas.
'Devuelve:
' - Una colección donde están recogidas las posiciones donde se
encuentran las
' palabras encontradas, o nada (Nothing), si no se encontró ninguna.
'Notas:
' - Si strTextoABuscar o strTextoDondeBuscar no son válidos (nulos o en
blanco),
' siempre devuelve nada (Nothing).
' - Si strUltimaPalabra no es válida (nula o en blanco), buscará en todo
el texto
' de strTextoDondeBuscar.
Function BuscarTexto(ByVal strTextoABuscar As String, ByVal
strTextoDondeBuscar As String, _
ByVal strUltimaPalabra As String) As Collection
Dim intUltimaPos As Integer
Dim intPos As Integer
Dim strDonde As String
Dim pos As New Collection

'Si strTextoABuscar o strTextoDondeBuscar no son válidos, devuelve
Nothing
If String.IsNullOrEmpty(strTextoABuscar) OrElse
String.IsNullOrEmpty(strTextoDondeBuscar) Then
Return Nothing
End If

If String.IsNullOrEmpty(strUltimaPalabra) Then
'Si strUltimaPalabra no es válida, lo indicamos como si no estuviera
intUltimaPos = 0
Else
'Si no, la buscamos en el texto
intUltimaPos = strTextoDondeBuscar.IndexOf(strUltimaPalabra)
End If

If intUltimaPos > 0 Then
'Si hemos encontrado strUltimaPalabra, recortamos la frase donde
buscamos
'hasta su posición
strDonde = strTextoDondeBuscar.Substring(1, intUltimaPos)
Else
'Si no, buscaremos en todo el texto
strDonde = strTextoDondeBuscar
End If

'Buscamos la primera coincidencia
intPos = strDonde.IndexOf(strTextoABuscar)

If intPos <= 0 Then
'Si no hay una primera coincidencia, devolvemos nada (Nothing)
Return Nothing
Else
'De lo contrario, agregamos la coincidencia a la colección
pos.Add(intPos)

'Y seguimos buscando coincidencias mientras existan
Do While intPos > 0
intPos = strDonde.IndexOf(strTextoABuscar, intPos +
strTextoABuscar.Length)

'Agregándolas a la colección
If intPos > 0 Then
pos.Add(intPos)
End If
Loop

'Y devolviéndola con todas las coincidencias encontradas
Return pos
End If
End Function

Un saludo,


Patxi Sanz
patxisanz[ARROBA]yahoo[PUNTO]es
Tudela (NA)

Preguntas similares