Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Regex: bin zu doof dafür

4 views
Skip to first unread message

Armin Zingler

unread,
Apr 28, 2010, 9:07:43 AM4/28/10
to
Hi,

nachdem ich die Regex-Doku jetzt x-fach rauf und runter
durchsucht habe und immer noch keinen Einstiegspunkt gefunden habe,
frage ich mal hier:

Ich habe Text nach folgendem Format: (ist noch kein regulärer Ausdruck)

"*" def "*" [jkl "*" [*]]"

Wobei "*" Platzhalter für igendeinen Text sind und "[]" optionaler
Text ist.

Beispiel:

"abc" def "ghi" [jkl "mno" [pqr]]"

Ich möchte in diesem Beispiel die Texte
- abc
- ghi
- mno
- pqr

extrahieren. Welchen reg. Ausdruck muss ich dafür verwenden?
Bei der Doku fehlt mir der Einstieg. So etwas wie "Platzhalter" finde
ich nicht. Nur irgendwelche Begriffe wie "Ersetzungen" und "Quantifizierer",
die nicht wirklich erklärt werden. Brauche ich die? Wonach muss
ich suchen? Ich habe keine Ahnung.

--
Armin

Tobias Burger

unread,
Apr 28, 2010, 9:52:37 AM4/28/10
to
Hallo Armin,

bin mir jetzt nicht sicher, ob ich die Vorgaben richtig Verstanden habe:
* Text darf nur aus alphanumerischen Zeichen bestehen
* Text muss in doppelten Anfï¿œhrungszeichen oder in eckigen Klammern stehen

Dann kï¿œnnte das Regex-Muster so aussehen:
["\[](\w+)["\]]

Ich kann dir fï¿œr das Prototyping von Regex-Ausdrï¿œcken einen Regex-Editor
wï¿œrmstens empfehlen. Damit kannst du rasch Patterns auf ihre Gï¿œltigkeit
ï¿œberprï¿œfen und erhï¿œltst Hilfe zu deinem Muster...
Ich verwende dafï¿œr beispielsweise Expresso (http://www.ultrapico.com/).
Das Erstellen der Regex-Instanz kann so ein Werkzeug auch gleich ï¿œbernehmen
(wenn nï¿œtig kann es die Expression sogar in eine Assembly kompilieren):
Regex regex = new Regex("[\"\\[](\\w+)[\"\\]]");

MfG
Tobias

"Armin Zingler" <az.n...@freenet.de> schrieb im Newsbeitrag
news:edS4pQt5...@TK2MSFTNGP05.phx.gbl...


> Hi,
>
> nachdem ich die Regex-Doku jetzt x-fach rauf und runter
> durchsucht habe und immer noch keinen Einstiegspunkt gefunden habe,
> frage ich mal hier:
>

> Ich habe Text nach folgendem Format: (ist noch kein regulï¿œrer Ausdruck)


>
> "*" def "*" [jkl "*" [*]]"
>

> Wobei "*" Platzhalter fï¿œr igendeinen Text sind und "[]" optionaler


> Text ist.
>
> Beispiel:
>
> "abc" def "ghi" [jkl "mno" [pqr]]"
>

> Ich mï¿œchte in diesem Beispiel die Texte


> - abc
> - ghi
> - mno
> - pqr
>

> extrahieren. Welchen reg. Ausdruck muss ich dafï¿œr verwenden?


> Bei der Doku fehlt mir der Einstieg. So etwas wie "Platzhalter" finde
> ich nicht. Nur irgendwelche Begriffe wie "Ersetzungen" und
> "Quantifizierer",

> die nicht wirklich erklï¿œrt werden. Brauche ich die? Wonach muss

Armin Zingler

unread,
Apr 28, 2010, 11:08:51 AM4/28/10
to
Am 28.04.2010 15:52, schrieb Tobias Burger:
> Hallo Armin,
>
> bin mir jetzt nicht sicher, ob ich die Vorgaben richtig Verstanden habe:
> * Text darf nur aus alphanumerischen Zeichen bestehen
> * Text muss in doppelten Anfï¿œhrungszeichen oder in eckigen Klammern stehen
>
> Dann kï¿œnnte das Regex-Muster so aussehen:
> ["\[](\w+)["\]]
>
> Ich kann dir fï¿œr das Prototyping von Regex-Ausdrï¿œcken einen Regex-Editor
> wï¿œrmstens empfehlen. Damit kannst du rasch Patterns auf ihre Gï¿œltigkeit
> ï¿œberprï¿œfen und erhï¿œltst Hilfe zu deinem Muster...
> Ich verwende dafï¿œr beispielsweise Expresso (http://www.ultrapico.com/).
> Das Erstellen der Regex-Instanz kann so ein Werkzeug auch gleich ï¿œbernehmen
> (wenn nï¿œtig kann es die Expression sogar in eine Assembly kompilieren):
> Regex regex = new Regex("[\"\\[](\\w+)[\"\\]]");


Danke dir.

Mittlerweile ist der Groschen gefallen. Es haperte nur beim Einstieg.

Mein Muster

"*" def "*" [jkl "*" [*]]"

hab ich jetzt ï¿œbersetzt nach

"(?<group1>\w+)" def "(?<group2>\w+)"( jkl "(?<group3>\w+)")?

Mï¿œsste stimmen, oder? Es funktioniert damit, also scheint es richtig
zu sein. :) Mit

m = ex.match(...)
m.group("group1").value

kann ich dann auf die gesuchten Gruppen zugreifen.


--
Armin

Tobias Burger

unread,
Apr 29, 2010, 2:49:32 AM4/29/10
to
Hallo Armin,

freut mich, dass du die Regex-Kurve so langsam kriegst...

Also wenn es sich bei def und jkg um konstante Werte handelt und deine
einzigen Variablen die Sternchen sind, dann sollte es mit folgendem Pattern
klappen:
"(?<group1>\w+)" def "(?<group2>\w+)"(?: \[jkl "(?<group3>\w+)"(?:
\[(?<group4>\w+)\])?\])?
Ich war mir eben nicht sicher wie variabel dein Muster sein kann...

Das oben genannte Pattern matcht:
"abc" def "ghi" [jkl "mno" [pqr]] -> abc, ghi, mno, pqr
"abc" def "ghi" [jkl "mno"] -> abc, ghi, mno
"abc" def "ghi" -> abc, ghi

MfG
Tobias

"Armin Zingler" <az.n...@freenet.de> schrieb im Newsbeitrag

news:#gmcVTu5...@TK2MSFTNGP04.phx.gbl...

0 new messages