Extraer string entre "[" y "]"

Iniciado por extreme69, 17 Septiembre 2011, 01:35 AM

0 Miembros y 1 Visitante están viendo este tema.

extreme69

Tengo:

asd = aitheoiethi[BLABLABLA]taihoithaoihtoea

Y necesito "BLABLABLA" en la variable asd2.

Probé con Mid, Split, Left, Right, pero en todos los casos tengo que saber las posiciones, y no sé cuantos caracteres va a tener "BLABLABLA" ni cuantos caracteres hay antes ni después.

¿Será que primero tengo que ver en que posición del string está el "[", luego hacer lo mismo con el "]" y una vez que sé las posiciones hacer un mid? ¿o hay alguna manera más fácil/rápida?




DarkMatrix

#1
Código (vb) [Seleccionar]
Public Function StrBetween(Cadena As String, SubCadena1 As String, Subcadena2 As String) As String

   Dim Pos1 As Integer, Pos2 As Integer

   Pos1 = InStr(UCase(Cadena), UCase(SubCadena1)) + 1
   Pos2 = InStr(UCase(Cadena), UCase(Subcadena2))

   If Pos1 <> 0 And Pos2 <> 0 Then

       StrBetween = Mid$(Cadena, Pos1, Pos2 - Pos1)

   End If

End Function

Private Sub Form_Load()

   Dim ASd  As String
   Dim Asd2 As String

   ASd = "aitheoiethi[BLABLABLAkjhuihui]taihoithaoihtoea"
   Asd2 = StrBetween(ASd, "[", "]")

   MsgBox Asd2

End Sub


Por hay tambien hay una funcion que hizo Psyke1, espero que te sirva...

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

extreme69


BlackZeroX

#3
.

Cita de: extreme69 en 17 Septiembre 2011, 01:35 AM
¿Será que primero tengo que ver en que posición del string está el "[", luego hacer lo mismo con el "]" y una vez que sé las posiciones hacer un mid? ¿o hay alguna manera más fácil/rápida?

que comes que adivinas...

Cita: http://visual-coders.herobo.com/blog/?p=1

Código (Vb) [Seleccionar]


'------------------------------------------------------------------------
' *Function : Text_Between_Words
' *Author   : *PsYkE1*
' *Mail     : vbpsyke1@mixmail.com
' *Date     : 10/4/10
' *Purpose  : It returns the text wich is between two words
' *Recommended Websites :
'       http://foro.rthacker.net/
'       http://InfrAngeluX.Sytes.Net/
'------------------------------------------------------------------------
Option Explicit
Public Function Text_Between_Words(ByVal sTextToAnalyze As String, ByVal sStartWord As String, ByVal sEndWord As String) As String
Dim iPosition1                  As Integer
Dim iPosition2                  As Integer
Dim iStart                      As Integer
   iPosition1 = InStr(sTextToAnalyze, sStartWord)
   If CBool(iPosition1) Then
       iStart = iPosition1 + Len(sStartWord)
       iPosition2 = InStr(iStart, sTextToAnalyze, sEndWord)
       If CBool(iPosition2) Then
           Text_Between_Words = Mid$(sTextToAnalyze, iStart, iPosition2 - iStart)
       End If
   End If
End Function



Código (vb) [Seleccionar]


Debug.Print Text_Between_Words("El contexto es el ámbito de referencia de un texto. ¿Qué entiendo por ámbito de referencia?.", "referencia", "referencia")



Dulces Lunas!¡.
The Dark Shadow is my passion.

seba123neo

Código (vb) [Seleccionar]
Private Sub Form_Load()
MsgBox TextoEntreMedio("aitheoiethi[BLABLABLA]taihoithaoihtoea", "[", "]")
End Sub

Private Function TextoEntreMedio(Texto As String, Palabra1 As String, Palabra2 As String)
TextoEntreMedio = Left$(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), InStr(Mid$(Texto, InStr(Texto, Palabra1) + Len(Palabra1)), Palabra2) - 1)
End Function
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX


Código (Vb) [Seleccionar]


Private Sub Form_Load()
MsgBox TextoEntreMedio("aitheoiethi[BLABLABLA]taihoithaoihtoea", "(", "]")
End Sub



Dulces Lunas!¡.
The Dark Shadow is my passion.

Psyke1

#6
Un poco mejorada:
Código (vb) [Seleccionar]
Option Explicit

Public Static Function TextBetweenWords$(ByRef sText$, ByVal sWord1$, ByVal sWord2$)
Dim lPos1&, lPos2&, lStart&
   If LenB(sText) Then
       lPos1 = InStrB(1, sText, sWord1, vbBinaryCompare)
       If lPos1 Then
           lStart = lPos1 + LenB(sWord1)
           lPos2 = InStrB(lStart, sText, sWord2, vbBinaryCompare)
           If lPos2 Then
               TextBetweenWords = MidB$(sText, lStart, lPos2 - lStart)
           End If
       End If
   End If
End Function


Private Sub Form_Load()
   Debug.Print TextBetweenWords("qwertysdfcv [raul338 es feo] prueba", "[", "]")
End Sub


Devuelve:
raul338 es feo



Y con RegExp:
\[([^\[]+)\]

DoEvents! :P