Laden...

Regex: Zwei Int-Werte aus einem String herausfiltern

Erstellt von MacReeg vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.892 Views
M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren
Regex: Zwei Int-Werte aus einem String herausfiltern

Hallo zusammen!

Ich müsste aus eine String zwei Integer-Werte (mit je einem Regex) herausfiltern und bekomme es nicht hin. Hier der String :

1 (max. 4)

Beide Int-Werte können mehrstellig werden! Danke im voraus!

Gruß, Ernst.

E-Mail : info@inc-x.de
Website : www.inc-x.de

U
1.688 Beiträge seit 2007
vor 15 Jahren

(\d+) (max. (\d+))

die zwei Werte befinden sich dann in den entsprechenden Gruppen.

W
558 Beiträge seit 2006
vor 15 Jahren

(\d)(^\d)(\d)*

Hallo,

deine Beschreibung ist nur spärlich, das wäre jedoch eine Möglichkeit, wenn ich dich richtig verstanden habe. Du musst dann im Match auf Groups 0 und 2 zugreifen.

Siehe auch: Regex-Tutorial im Forum bei Artikel

grüße
webstarg

W
558 Beiträge seit 2006
vor 15 Jahren

Achso, das war kein Beispielstring sondern ist immer der String.

Dann passt die Antwort von ujr zu deiner Frage.

grüße

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

deine Beschreibung ist nur spärlich, das wäre jedoch eine Möglichkeit, wenn ich dich richtig verstanden habe. Du musst dann im Match auf Groups 0 und 2 zugreifen.

Hallo!

Danke für die Hilfe! Folgenden Code habe ich jetzt eingebaut:

        string UserPerSystem = Regex.Match("1 (max. 4)", @"(\d)*(^\d)*(\d)*", RegexOptions.None).Groups[0].Value;
        string HardwareLimit = Regex.Match("1 (max. 4)", @"(\d)*(^\d)*(\d)*", RegexOptions.None).Groups[2].Value;

In der Groups[0] steht auch die 1 drin, aber in Groups[2] ist das Value leer.

Gruß Ernst

E-Mail : info@inc-x.de
Website : www.inc-x.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo MacReeg,

schreib den * mit in die Gruppe.

Außerdem muss es in der Mitte [\d]* und nicht (\d)* heißen.

Wodurch dich dann natürlich die zweite und nicht mehr die dritte Gruppe interessiert. Verwende im Zweifel benannte Gruppen.

herbivore

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

Danke, jetzt funktionierts!!!

Gruß, Ernst.

E-Mail : info@inc-x.de
Website : www.inc-x.de

49.485 Beiträge seit 2005
vor 15 Jahren

hallo MacReeg,

axo, was mir gerade noch einfällt: es ist besser überall + statt * zu verwenden

herbivore

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

Hallo herbivore!

Was mir aufgefallen ist, dass der Regex nur mit einstelligen Integer-Werte umgehen kann. Sobald diese zweistellig werden, wird immer nur die letzte Zahl übergeben. Kann man den Regex auch so abändern, dass er mehrstellige Int-Werte herausfiltern kann?

Gruß Ernst

E-Mail : info@inc-x.de
Website : www.inc-x.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo MacReeg,

das kann der Pattern, wenn du alles umgesetzt hast, was ich geschrieben habe.

herbivore

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

Tja, da werd ich wohl etwas übersehen haben. Leider sind meine Regex-Kenntnisse eher als rudimentär zu bezeichnen.

Gruß Ernst

E-Mail : info@inc-x.de
Website : www.inc-x.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo MacReeg,

so lang ist der der Thread nun nicht und selbst wenn du was übersehen hast, sollte ein weiteres Mal lesen sicher helfen.

Ansonsten kann ich dir noch [Artikel] Regex-Tutorial und On-the-fly Regex-Tester: Regex-Lab empfehlen.

herbivore

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

Hallo Herbivore!

Danke für den Link. Ich habe das jetzt was ich wollte (dank des Links!).

Mit folgenden zwei Patterns funktionierts:

"(\d{1,})+[^\d]+(\d)+"
"(\d)+[^\d]+(\d{1,})+"

Danke nochmal!!!

Gruß Ernst

E-Mail : info@inc-x.de
Website : www.inc-x.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo MacReeg,

sorry, aber die Pattern sind Murx. Dein Pattern war zwischenzeitlich:

(\d)*(^\d)*(\d)*

Dazu schrieb ich:

schreib den * mit in die Gruppe.

Außerdem muss es in der Mitte [\d]* und nicht (\d)* heißen.

Im Ergebnis also

(\d*)[^\d]*(\d*)

Dann schrieb ich noch

axo, was mir gerade noch einfällt: es ist besser überall + statt * zu verwenden

Im Ergebnis also

(\d+)[^\d]+(\d+)

Und schon hast du, was du willst. Du wärst ohne den Link nur mit dem Thread zu einem besseren Ergebnis gekommen. Der Link war eher dafür, Regex besser zu verstehen.

Warum du statt + das gleichbedeutende aber umständliche {1,} schreibst, ist mir nicht ganz klar geworden. Warum du auf eine Wiederholung mit {1,} noch mal eine unnötige mit + obendrauf setzt, erst recht nicht.

herbivore

M
MacReeg Themenstarter:in
49 Beiträge seit 2006
vor 15 Jahren

Tja, jetzt wo Du es sagst, klings auch plausibel.

Danke und sorry für meine Unkenntnis (ich habe einiges gelernt!).

Gruß Ernst

E-Mail : info@inc-x.de
Website : www.inc-x.de