VB Express - String extrahieren
lima-city → Forum → Programmiersprachen → Programmieren mit .NET & Mono
abschneiden
array
blank start
code
dank
detail
form
funktion
gesuchten strings
http
list
methode
position
start
string
system
test
text
url
welt
-
Nabend,
ich habe mir heute überlegt, mich ein wenig mit VB zu beschäftigen. Dazu nutze ich VB Express 2010.
So weit, so gut. Ich stehe bereits jetzt vor meinem ersten Problem und bei Google habe ich nicht direkt das gefunden, was ich suche :D
Ich habe bisher relativ viel mit AutoIt gemacht, weshalb ich in einigen Punkten mittlerweile sehr verwöhnt bin. Da wäre u.A. die Funktion _Stringbetween.
Ich hatte mir jetzt den Spaß gemacht und versucht, diese Funktion mit meinen nicht vorhandenen VB-Kenntnissen zu portieren:
Public Function _StringBetween(ByVal s_String As String, ByVal s_Start As String, ByVal s_End As String, Optional ByVal v_Case As Integer = -1) ' Set case type Dim s_case = "" If v_Case = -1 Then s_case = "(?i)" ' Escape characters Dim s_pattern_escape = "(\.|\||\*|\?|\+|\(|\)|\{|\}|\[|\]|\^|\$|\\)" s_Start = s_Start.Replace(s_pattern_escape, "\\$1") s_End = s_End.Replace(s_pattern_escape, "\\$1") ' If you want data from beginning then replace blank start with beginning of string If s_Start = "" Then s_Start = "\A" ' If you want data from a start to an end then replace blank with end of string If s_End = "" Then s_End = "\z" Dim a_ret As New Regex("(?s)" & s_case & s_Start & "(.*?)" & s_End, 3) Return a_ret End Function
Naja... Hätte ja klappen können (Eine Ausnahme (erste Chance) des Typs "System.InvalidCastException" ist in Microsoft.VisualBasic.dll aufgetreten.) :D Nun zur eigentlichen Frage:
Gibt es eine ordentliche Möglichkeit, einen String zwischen zwei Strings zu extrahieren? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Bin mir nicht ganz sicher, was Du meinst mit "einen String zwischen zwei Strings zu extrahieren". Aber vielleicht hilft Dir die Methode
weiter.Substring
Mehr Info gibt es unter http://openbook.galileocomputing.de/vb_net/msvb060001.htm
Grüße
marmota -
Mit "einen String zwischen zwei Strings zu extrahieren" (in der Tat etwas blöd ausgedrückt) meine ich
Hallo Welt, dies ist ein Test :)
aus diesem String beispielsweise das Wort "ist" zu extrahieren, in Form von
_StringBetween('Hallo Welt, dies ist ein Test :)', 'dies', 'ein')
Als Ergebnis erhalte ich dann alle Vorkommnisse, die zwischen "dies" und "ein" gefunden wurden (in Form eines Arrays, anders wirds nicht gehen).
Hoffe, dass es jetzt etwas verständlicher war :D
Mit Substring werde ich wohl nicht all zu weit kommen, befürchte ich.
EDIT:
Bin mittlerweile einen Schritt weiter:
Public Function _StringBetween(ByVal s_String As String, ByVal s_Start As String, ByVal s_End As String) Dim Code As String Code = Split(s_String, s_Start)(1) Code = Split(Code, s_End)(0) Return Code End Function
Das erfüllt zumindest grundsätzlich meinen Bedarf, ist mir aber noch nicht "funktionell" genug.
Beitrag zuletzt geändert: 18.5.2012 23:06:51 von fabo -
wäre jetzt auch meine nächste Idee gewesen.Split
Ich weiß jetzt nicht wie gleichförmig die Strings sind, die Du auseinander nehmen möchtest. Haben die immer das selbe Trenneichen? Also z.B. ein Leerzeichen oder ein Komma? Oder können mehrere verschiedene Trennzeichen vorkommen? Ich glaube bei Split kann man auch Delimiter angeben. Keine Ahnung ob diese Delimiter in dot.net auch per RegEx angegeben werden können.
Wenn man erstmal ein Array mit den zerlegten Strings hat, müsste es ja dann relativ simpel sein, die gesuchten Strings zu finden.
Beispielweise:
1. StartString, EndString an eine Methode übergeben
2. StartString im Array suchen, Position(Index) merken
3. EndString suchen
4. die gesuchten Strings befinden sich zwischen StartString +1 bis EndString - 1.
Hm. Da ich selber kein Win momentan nutze (und VB eh nicht*g*) kann ich das leider nicht selber ausprobieren
Beitrag zuletzt geändert: 18.5.2012 23:19:59 von marmota -
Hallo fabo,
ich würde es ja so machen:
Und wenn Du mehr funktionalität benötigst wirst Du wohl zwangsläufig mit RegEx arbeiten müssen.' Oben einfügen: ' Imports System.Collections.Generic Function StringBetween(text As String, str_start As String, str_end As String) As List(Of String) Dim tokens As String() = text.Split({str_start}, StringSplitOptions.RemoveEmptyEntries) StringBetween = New List(Of String) For Each token As String In tokens Dim idx As Integer = token.IndexOf(str_end) If idx >= 0 Then StringBetween.Add(token.Substring(0, idx)) End If Next End Function
-
Danke, jedoch stellt sich mir die Frage nach dem Unterschied. Okay, ich erhalte an Stelle eines Strings ein Array, aber ist das im Prinzip nicht das Selbe wie vorher nur "pompöser"? Also ich hab's jetzt so:
Public Function _StringBetween(ByVal s_String As String, ByVal s_Start As String, ByVal s_End As String) As String _StringBetween = Split(s_String, s_Start)(1) _StringBetween = Split(_StringBetween, s_End)(0) End Function
Bis auf Groß/Klein-Unterscheidung tut es ja erst einmal das, was es soll. Dass ich das mit regulären Ausdrücken nicht hin bekomme, habe ich oben bereits eindrucksvoll gezeigt :p
Beitrag zuletzt geändert: 19.5.2012 11:26:54 von fabo -
Hallo fabo,
ich habe gedacht, der Eingabetext könnte evtl. länger sein und die Start/Stop-Kombination mehrfach auftreten. Daher habe ich es so gemacht, dass er auf einmal alle Stellen heraussucht bevor man auf einem langen Text mehrfach Split aufruft.
Deine Variante erzeugt ja auch zwei Arrays. Vermutlich wäre es mit IndexOf und Substring aber resourcenschondender einen Teilstring herauszufischen. -
Achso, okay. Wieder etwas gelernt :D Danke dir :)
-
Eine sehr gute Übersicht über die oben genannten Befehle sind auf der Seite VB@rchiv zu finden.
Der Link dazu lautet:
http://www.vbarchiv.net/workshop/details.php?id=88
Dort sind im Abschnitt 2.4.7 die gängigsten Stringmanipulationen beschrieben.
Eventuell sind auch die beide Befehle instr und like interessant:
Die InStr-Funktion gibt die Position des ersten Zeichens einer Zeichenfolge innerhalb einer anderen Zeichenfolge zurück.
Ein Beispiel für den Like-Operator gibt es hier: http://www.vbarchiv.net/tipps/details.php?id=1719
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage