Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Regulärer Ausdruck zum Auslesen von Werten zwischen [ ]
flacker
myCSharp.de - Member



Dabei seit:
Beiträge: 33

Themenstarter:

Regulärer Ausdruck zum Auslesen von Werten zwischen [ ]

beantworten | zitieren | melden

Hallo,

ich habe eine Textbox in der ich Text der folgenden Form akzeptieren möchte:

[wert];[wert;wert];[wert];.... usw

Jetzt möchte ich gern den Text zwischen den eckigen Klammern auslesen. Dafür sind ja reguläre ausdrücke geeignet, nur leider schaffe ich es im moment nicht den richtigen Ausdruck zu finden.

Mit freundlichen Grüßen

flacker
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7581
Herkunft: Waidring

beantworten | zitieren | melden

Hallo flacker,

schau dir dazu mal das Tool On-the-fly Regex-Tester: Regex-Lab an. Damit und dessen F1-Hilfe solltest du es schaffen. Sonst melde dich wo du genau hängst.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
flacker
myCSharp.de - Member



Dabei seit:
Beiträge: 33

Themenstarter:

beantworten | zitieren | melden

Also ich habe jetzt den Ausdruck herraus welche mit immer einen Ausdruck liefert
 .*\[(?<match>.*)\].*

Zumindestens sagt das Tool dies. Jetzt ich aber gern alle werte haben und nicht nur einen
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von flacker am .
private Nachricht | Beiträge des Benutzers
Palladin007
myCSharp.de - Member

Avatar #avatar-4140.png


Dabei seit:
Beiträge: 1551
Herkunft: Düsseldorf

beantworten | zitieren | melden

Das nennt sich gieriges Verhalten.

Es wird dir alles zwischen einer geöffneten und einer geschlossenen eckigen Klammer zurück gegeben, in diesem Fall also die erste Geöffnete und die letzte Geschlossene.

Du musst daher anstelle aller Zeichen nur die zu lassen, die keine geschlossene eckige Klammer sind.

Ich kann es gerade nicht testen, aber probier mal das:

.*\[(?<match>^\]*)\].*
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Ich würde so daran gehen:

Was du ja haben willst, ist das du alles zwichen [] finden willst. Also brauchst du auf jedenfall etwas der Form \[xxx\]. Jetzt willst du den Inhalt in den Klammern schlussendlich lesen, also packst du da eine entsprechende Gruppe dafür rein \[(?<match>xxx)\]. Jetzt wär es sinnvoll eine möglichst Präzise Beschreibung des Inhaltes zu bekommen. Welche Zeichen dürfen in der Klammer sein? Das sind alle, außer [ und ]. Also hast du für den INhalt die Beschreibung [^\[\]], und das darf sich natürlich beliebig oft wiederholen, so fehlt noch ein * dahinter. dadurch erhällst du den Ausdruck \[(?<match>[^\[\]]*)\]. Damit findest du jetzt schon eine Klammer. Jetzt musst du probieren, durch wiederholung alle Klammern zu finden. Zwichen den Klammern darf ja alles stehen, außer [ und ]. Also Matcht \[(?<match>[^\[\]]*)\][^\[\]]* einen Klammerausdruck, und den Bereich bis zum nächsten. Und das ist genau was du willst. denn ab da kannst du den Asdruck wieder von vorne anwenden. Also fehlen nur noch einmal ein * dahinter und der Ausdruck sollte passen: (\[(?<match>[^\[\]]*)\][^\[\]]*)*

Es sieht wirklich komplizierter aus als es ist, vorallem durch die vielen Klammern. Aber so gehe ich vor wenn ich einen solchen Ausdruck aufstelle.

LG pdelvo
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo flacker,
Zitat
Jetzt ich aber gern alle werte haben und nicht nur einen
alle Matches bekommt man mit Regex.Matches (statt Regex.Match). Voraussetzung ist natürlich, dass der Pattern für sich genommen jeweils nur auf einen Wert bzw. ein Klammerpaar passt.

Bitte schau auch in [Artikel] Regex-Tutorial.

herbivore
private Nachricht | Beiträge des Benutzers