Bestimmte Stelle eines Strings ausschneiden.

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von FloFuchs.

    Bestimmte Stelle eines Strings ausschneiden.

    Guten Tag

    Ich möchte eine bestimmte Stelle eines String ausschneiden. Diese Stelle hat keinen bestimmten Wert oder Zeichenlängte oder sonstiges.
    Sie beginnt und endet mit dem Zeichen ' " '

    Beispiel:
    Hallo wie "geht" es dir.
    Dann möchte ich das geht rausschneiden lassen.

    Liebe Grüße
    Ja einfach mit RegEx

    z.b (ausn Kopf)

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpression
    2. Dim file as String = IO.File.ReadAllText(deine File)
    3. Dim Matches as MatchCollection = Regex(file ,"Hallo wie ""(.*?)"" es dir.")
    4. For each Match as Match in Matches
    5. Messagebox.show(Match.groups(0).value)
    6. Next



    oder als Function

    VB.NET-Quellcode

    1. Public Function Get_Irgendwas(file as string) as String
    2. Dim Matches as MatchCollection = Regex(file, "Hallo wie ""(.*?)"" es dir.")
    3. For each Match as Match in Matches
    4. return Match.groups(0).value
    5. Next
    6. return nothing
    7. End Function

    oder so änlich^^
    Ah okay, also sowie Sinlyu sagt

    oder du kannst per IndexOf und LastIndexOf die jeweiligen Positionen von " herausfinden und anschließend per Substring den gewünschten Teil extrahieren und ausgeben.

    Wobei ich persönlich die Regex Variante vorziehen würde ist "weniger" Arbeit und schneller
    ich lese aus einer datei und erhalte nun für jede Zeile ein string.
    Aus diesem String möchte ich nun, falls vorhanden den Text zwischen den Anführungszeichen auslesen.

    Im Beispiel kenne ich ja den Text. Hier kenne ich den aber nicht

    VB.NET-Quellcode

    1. Private Function foo(ByVal Code As String) As String
    2. Dim MC As MatchCollection = Regex.Matches(Code, """(?<text>.*?)""")
    3. For Each M As Match In MC
    4. Return M.Groups("text").Value
    5. Next
    6. Return Nothing
    7. End Function


    ah da du ja für jede Zeile nur ein String kriegst:

    VB.NET-Quellcode

    1. Private Function boo(ByVal Code As String) As String
    2. Return Regex.Matches(Code, """(?<text>.*?)""")(0).Groups("text").Value
    3. End Function


    sowas?
    Da kommen die wieder mit der RegEx Keule ^^

    So gehts am einfachsten, ohne, dass man RegEx extra lernen muss:

    VB.NET-Quellcode

    1. Private Function GetEnclosedString(Text As String, EnclosingChar As Char) As String
    2. Dim startindex, textlength As Integer
    3. startindex = Text.IndexOf(EnclosingChar)
    4. If startindex >= 0 Then
    5. textlength = Text.IndexOf(EnclosingChar, startindex + 1) - startindex - 1
    6. Return Text.Substring(startindex + 1, textlength)
    7. Else
    8. Return ""
    9. End If
    10. End Function


    Wird zum Beispiel so aufgerufen:

    VB.NET-Quellcode

    1. Label1.Text = GetEnclosedString(TextBox1.Text, """"c)

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    furzbacke77 schrieb:

    ich lese aus einer datei und erhalte nun für jede Zeile ein string.
    Warum brauchst Du 3 Posts, um Dein simples Problem darzustellen?
    Beim nächsten Mal bitte gleich die Gwesamtinformation, am Besten mit Text-Beispiel, im 1. Post.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    vb-checker schrieb:

    Da kommen die wieder mit der RegEx Keule

    ja, natürlich.
    in einem Regex kannste in einer Zeile definieren, was ein Match (Treffer) sein soll, und wenndedann die MatchCollection erhälst, dann hast du alle Matches, und jeder Match gibt den StartIndex, die Länge und den Text des Treffers an.
    Deine Methode hingegen findet nur einen einzigen Text, und gibt nicht an, an welcher Position der ist - also um (mehrere) Strings auszuschneiden greift das definitiv zu kurz.
    Ich weiß. Allerdings mutet es für Unwissende eher wie eine Raketenwissenschaft an. Daher versuche ich alles, was man mit angemessenem Aufwand mit den String-Funktionen umsetzen kann, auch damit zu realisieren. Dies ist zum einen viel verständlicher (vorausgesetzt, man "kann" RegEx nicht) und zum anderen ist es bei vielen einfachen Problemen sinnvoller. Da kann der Fragesteller wenigstens noch selbst dran arbeiten. Dessen bin ich mir nicht so sicher, wenn er von einem anderen User einen RegEx String geliefert bekommt, der durch Zauberei (ja, nicht wirklich) die gewünschten Ergebnisse liefert. Wenn ich nur den ersten Treffer brauche und nur das Wort selbst ohne Positionsangaben, dann nutzen mir die in RegEx angebotenen Infos übrigens auch nichts (minimal Richtung Overkill). Daher fand ich das jetzt angebracht

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !

    theoretisch... halt anders rum...
    erst bis zum ersten " alles removen un dann ab dem 2. " alles
    weil es wird ja gelöscht mit remove

    VB.NET-Quellcode

    1. s = s.Remove(0, s.IndexOf(""""))
    2. s = s.Remove(s.IndexOf("""", 2) + 1)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „FloFuchs“ ()