| |
VB.NET - FortgeschritteneSchließende klammer finden | | | Autor: met | Datum: 21.10.21 21:25 |
| Hallo, ich habe in einem string die Position einer öffnenden geschweiften Klammer.
Wie kann ich die Position der dazugehörige schließende klammer finden und alle anderen öffnenden und schließenden klammern überspringen? | |
Re: Schließende klammer finden | | | Autor: Kuno60 | Datum: 21.10.21 21:55 |
| Hallo, ein bestimmtes Klammerpaar kann man mit Regex finden.
Ansonsten den String durchsuchen und bei allen öffnenden Klammern den Index und die Klammernummer merken. Dabei die Klammernummer hochzählen. Bei schließenden Klammern die Klammernummer runter zählen. Klammerpaare haben dann die gleiche Klammernummer. | |
Re: Schließende klammer finden | | | Autor: met | Datum: 22.10.21 06:47 |
| Hallo Kuno,
so hatte ich das auch vor...
Kuno60 schrieb:
Zitat: | |
Ansonsten den String durchsuchen und bei allen öffnenden
Klammern den Index und die Klammernummer merken. Dabei die
Klammernummer hochzählen. Bei schließenden Klammern die
Klammernummer runter zählen. Klammerpaare haben dann die
gleiche Klammernummer. | |
... hatte nur gehofft, dass es evtl. schon eine fertige, schnellere Lösung gibt
Danke für die Antwort, met | |
Re: Schließende klammer finden | | | Autor: Manfred X | Datum: 22.10.21 08:55 |
| Hallo!
Irgend so etwas ...
Private Function Klammerpaarung(txt As String, pos As Integer) As Integer
Dim öffnend As String = "([{"
Dim schließend As String = ")]}"
If pos < 0 Or pos > txt.Length - 2 Then Return -1
Dim co As Char = txt(pos)
Dim ind As Integer = öffnend.IndexOf(co)
If ind = -1 Then Return -1
Dim cc As Char = schließend(ind)
Dim cnt As Integer = 1
Do
pos += 1
If txt(pos) = co Then cnt += 1 'öffnend
If txt(pos) = cc Then 'schließend
cnt -= 1
If cnt = 0 Then Return pos
End If
Loop While pos < txt.Length - 1
Return -1
End Function Beispiel:
Dim txt As String = "(aa{bb{cc{dd{ee}ff}gg}hh}ii)"
Dim pos As Integer = Klammerpaarung(txt, 6) | |
Re: Schließende klammer finden | | | Autor: Kuno60 | Datum: 23.10.21 14:32 |
| Hallo met,
Zitat: | | ... hatte nur gehofft, dass es evtl. schon eine fertige,
schnellere Lösung gibt | |
wie ich schon erwähnt habe, geht es auch mit RegEx.
Const muster = "(((?'auf'\{0})[^\{0}\{1}]*)+((?'zu-auf'\{1})[^\{0}\{1}]*)+)*(?(" & _
"auf)(?!))$"
Dim mu = String.Format(muster, "{", "}") 'Klammertyp einfügen
Dim m As Match = Regex.Match(s, mu, RegexOptions.Singleline Or _
RegexOptions.ExplicitCapture)
For Each c In m.Groups(2).Captures.Cast(Of Capture)
'über c die Ergebnisse abrufen
Next Bei m.Groups(2).Captures, kann man dann die Ergebnisse abrufen, in der Reihenfolge von innen nach außen und von links nach rechts. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|