AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Regex gesucht: Koordinaten (für C#)
Thema durchsuchen
Ansicht
Themen-Optionen

Regex gesucht: Koordinaten (für C#)

Ein Thema von Phoenix · begonnen am 6. Jun 2008 · letzter Beitrag vom 6. Jun 2008
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#1

Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 10:05
Hi,

ich kenne mich mit Regexen ja mal so gar nicht aus.
Ich suche nun einen, um eine Eingabe von Koordinaten zu validieren (und auseinanderzunehmen).

Eingabebeispiel: 50° 30' 20'' (oder auch 50°30'20").
Das heisst, der Ausdruck müsste flexibel auf einzelne und doppelte Hochkommata reagieren, und zur Not auch ` oder ´ als Hochkommata (einzeln oder doppelt) akzeptieren, und sich nicht um Leerzeichen scheren.

Im Prinzip bräuchte ich was, was a) validiert und b) mir gleich ein Array mit den drei Werten zurückliefert. Dass Regexen sowas aufdröseln können weiss ich. Nur nicht, wie

Wie komme ich nun am geschicktesten zu so einem Ausdruck (wie gesagt: Ich weiss, dass es Regexen gibt und in etwa was sie können, aber ich habe keinen Plan wie die funktionieren).
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 12:20
Meinst Du sowas?
Code:
(\d{1,2})°[ ]*(\d{1,2})['´`][ ]*(\d{1,2})(?:"|''|``|´´)
Wenn Du das so anwendest:
Code:
//Oxygene
var rx := new Regex("(\d{1,2})°[ ]*(\d{1,2})['´`][ ]*(\d{1,2})(?:\"|''|``|´´)");
var match := rx.Match(deinString);
if match.Success then
begin
  var grad := Int32.Parse(match.Groups[1].ToString);
  var minuten := Int32.Parse(match.Groups[2].ToString);
  var sekunden := Int32.Parse(match.Groups[3].ToString);
end;
bekomsmt Du durch Groups Dein Array.

Quelltext ohne Gewähr, hab's nur im Forum getippt.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.641 Beiträge
 
#3

Re: Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 12:30
Zitat von Christian S.:
Meinst Du sowas?
Möglich

Mich würd aber noch interessieren: Aber wie baut man sowas auf?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#4

Re: Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 14:31
Zitat von Phoenix:
Mich würd aber noch interessieren: Aber wie baut man sowas auf?
Meine Lieblings-Einführung zu regulären Echsen: http://tut.php-quake.net/regex.html

Man muss sich einfach angucken, was man in so einem Ausdruck haben willst. In deinem Beispiel:

Erstmal ein oder zwei Ziffer: (\d{1,2}) \d ist der Sammelausdruck für eine Ziffer
Dann das "°" Zeichen
Dann kein oder mehrere Leerzeichen: [ ]* [ ] ist eine Menge von Zeichen, in diesem Fall nur das Leerzeichen. * heißt "kein oder mehrmals"
Wieder ein oder zwei Ziffern
Nun willst Du eines dieser Zeichen haben: ' ´ `: ['´`]
Dann wieder kein oder mehrere Leerzeichen
Wieder ein oder zwei Ziffern
Anschließend willst Du " oder '' oder ´´ oder ``: (?:"|''|``|´´) "|" ist heißt "oder". "?:" sorgt dafür, dass die Klammer keine eigene Nummer bekommt


Alle Ausdrücke in Klammern, die kein "?:" am Anfang enthalten, sind Gruppen, die eine Nummer bekommen ("Look around" mal außen vor gelassen)
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 14:35
Wie wäre es denn mit der Idee, den Ausdruck vorher zu normalisieren? Wenn Du sagst, dass es verschiedene Hochkommata geben kann, dann falte die doch auf ein ganz bestimmtes Hochkomma zusammen. Leerzeichen könnten beispielsweise gänzlich rausfliegen und am Ende hättest Du nur noch Ziffern, den Kringel und genau eine Art von Hochkomma, das entweder einfach oder doppelt vorkommt.

Das würde den regulären Ausdruck deutlich verinfachen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#6

Re: Regex gesucht: Koordinaten (für C#)

  Alt 6. Jun 2008, 14:43
Müsste man ausprobieren, was performanter ist. Immerhin sind Strings in .NET ja nicht veränderbar und bei einer Ersetzung wird immer ein neuer String angelegt. Dem entgegen steht, dass man Regexen in .NET auch in eine Assembly kompilieren und "fertig" ausliefern kann, womit man dann doch recht fix ist.
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz