Laden...

Letzte Zahl in einem String finden?

Erstellt von math55 vor 15 Jahren Letzter Beitrag vor 15 Jahren 2.168 Views
math55 Themenstarter:in
314 Beiträge seit 2007
vor 15 Jahren
Letzte Zahl in einem String finden?

Hallo,

ich habe ein Problem, für welches ich keine Lösung habe. Ich habe Strings in dieser Art:

Musterstr. 12 bei Müller
Dr. Muster Platz 12 (a/c)
Musterstr. 12

Wie kann ich bei denen die letzte Zahl finden, ohne dabei die Daten hinter der Zahl zu verlieren. Ich möchte also sowas haben:

Musterstr. 12 bei Müller --> 12 bei Müller
Dr. Muster Platz 12 (a/c) --> 12 (a/c)
Musterstr. 12 --> 12

Momentan schau ich nach dem letzten Punkt oder dem letzten Space, was bei Variante 2 natürlich nicht klappt. Jemand eine Idee dazu?

Danke 😃

2.082 Beiträge seit 2005
vor 15 Jahren

Hallo math55,

ich würde via RegEx die Zahl extrahieren und dann beim string .LastIndexOf(zahl) verwenden. Dann kannst du den string teilen mit .Substring(lastIndex, denString.Length - lastIndex)

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo math55,

Regex: (\d+[^\d]+)$

Hallo frisch,

String-Operationen braucht man nicht, wenn man Regex verwendet.

herbivore

math55 Themenstarter:in
314 Beiträge seit 2007
vor 15 Jahren

Hallo, habs jetzt also so:


string street = "Musterstraße";
			
Match splitMatch = Regex.Match(street, @"(?<street>.*?)(?<housenumber>[0-9]*[^0-9]*$)");

Console.WriteLine("street: " + splitMatch.Groups["street"].Value);
Console.WriteLine("nummer: " + splitMatch.Groups["housenumber"].Value);

Funktioniert auch bestens, bis auf eine Ausnahme. Diese wäre, wenn ich nur eine Straße habe. Also z.B. nur Mustergasse. Dann habe ich im ersten writeline nichts stehen und im zweiten die Straße. Was ist da noch falsch?

Danke 😃

328 Beiträge seit 2006
vor 15 Jahren

Regex: (\d+[^\d]+)$

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

😉

Robert Wachtel

http://blog.robertsoft.de

math55 Themenstarter:in
314 Beiträge seit 2007
vor 15 Jahren

Funzt leider auch nicht. Da ist beides leer ... der Regex würde ja auch bedeuten, mindestens eine Zahl dahinter gefolgt von keiner Zahl, mindestens 0 mal. Aber der passt ja nicht, wenns gleich keine gibt.

328 Beiträge seit 2006
vor 15 Jahren

Das war aber Deine usrprüngliche Anforderung. Deine erweiterte Anforderung kannte ich zum Zeitpunkt meines Postens noch nicht.

Robert Wachtel

http://blog.robertsoft.de

math55 Themenstarter:in
314 Beiträge seit 2007
vor 15 Jahren

Ja, hab ich vergessen zu erwähnen. Also eine Straße ohne Nummer muss auch erkannt werden ... ich fummele gerade mit lookahead/lookbehind rum, geht aber auch nicht recht. hhmmm...

1.378 Beiträge seit 2006
vor 15 Jahren
(((\d+[^\d]*)|\w+)\s*)$

Lg XXX

328 Beiträge seit 2006
vor 15 Jahren

Nun, da sind wir wieder bei dem alten Problem.

Was ist denn mit

L8

oder

L 8

oder
**
L 8 12**

Was ist Straße, was ist Hausnummer?

L 8 12a

L 8 10-12

Robert Wachtel

http://blog.robertsoft.de

1.378 Beiträge seit 2006
vor 15 Jahren

Neuer Versuch:

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

Lg XXX

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo robert.wachtel,

(?<strasse>.*?)(?<hausnummer>\d+[\d]*)?$

Was ist Straße, was ist Hausnummer?

Das kann der Pattern natürlich nicht entscheiden. Er geht stur danach vor, dass die letzte Zahl die Hausnummer ist.

herbivore

math55 Themenstarter:in
314 Beiträge seit 2007
vor 15 Jahren

Ja, ich will nur die letzte Zahl und eventuelle dahinterliegende chars finden. Dann nehme ich an, dass das die Hausnummer ist. Mehr muss nicht sein.

@xxxprod: \d*[^\d]*)$ --> so hatte ichs ja am Anfang, geht nicht.

das Problem ist ja, dass [^\d] matcht und dann in housenumber matcht. Aber rausnehmen geht auch nicht, da ich sonst sowas wie 12a nicht bekomme. Das muss doch gehen!?

(?<strasse>.*?)(?<hausnummer>\d+[\d]*)?$ --> DANKE!

Grüße und Danke!!

328 Beiträge seit 2006
vor 15 Jahren

Ich gebe nochmal zu bedenken, dass Hausnummern wie 1-3 nicht gerade selten sind.

Robert Wachtel

http://blog.robertsoft.de

49.485 Beiträge seit 2005
vor 15 Jahren

Hallo robert.wachtel,

(?<strasse>.?)(?<hausnummer>(\d+\s[a-z]?\s-\s)?\d+[\d]*)?$

herbivore

328 Beiträge seit 2006
vor 15 Jahren

👍

Robert Wachtel

http://blog.robertsoft.de