Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Regulärer Ausdruck für natürliche Zahlen (https://www.delphipraxis.net/122869-regulaerer-ausdruck-fuer-natuerliche-zahlen.html)

Jakob Ullmann 23. Okt 2008 12:54


Regulärer Ausdruck für natürliche Zahlen
 
Hallo,

ich bräuchte einen regulären Ausdruck (PCRE) für natürliche Zahlen, in denen also kein Komma vorkommt. also dass wirklich nur natürliche Zahlen herausgesucht werden. Momentan hab ich verschiedene Dinge probiert und es sieht so aus:

Delphi-Quellcode:
(\d*)[\.]{0}
Das Problem liegt scheinbar daran, dass der Teil
Delphi-Quellcode:
[\.]{0}
falsch ist. Aber wie kann man das richtig machen? Hat jemand eine Idee? (Komma ist hier der Punkt, nicht das Komma.)

EDIT: Ich meine nicht, dass ein String eine natürliche Zahl ist, sondern dass in einem String eine natürliche Zahl vorkommt.

Daniel 23. Okt 2008 13:05

Re: Regulärer Ausdruck für natürliche Zahlen
 
ehm. Ganz habe ich die Aufgabenstellung wohl noch nicht verstanden.

\d+ erlaubt eine Reihe an Ziffern: 0 bis 32784873214687213461872348723164823176423187648326 4816243668 ist alles möglich

\d+(,\d+)? erlaubt Ziffern mit optionalem Komma - aber wenn ein Komma da ist, muss es mindestens eine Ziffer nach dem Komma geben.

Alloc 23. Okt 2008 13:13

Re: Regulärer Ausdruck für natürliche Zahlen
 
Hi,

Zitat:

Zitat von Jakob Ullmann
Hallo,

ich bräuchte einen regulären Ausdruck (PCRE) für natürliche Zahlen, in denen also kein Komma vorkommt. also dass wirklich nur natürliche Zahlen herausgesucht werden. Momentan hab ich verschiedene Dinge probiert und es sieht so aus:

Delphi-Quellcode:
(\d*)[\.]{0}

Wenn ich das richtig verstehe, hast du also schon das auslesen der Zahl und willst jetzt nur noch verhindern, dass auch Zahlen gefunden werden, die eigentlich ein Komma haben?

Wenn ja, würde ich sowas denken:
Delphi-Quellcode:
(\d*)[^\.]+
Grüße,
Chris

Jakob Ullmann 23. Okt 2008 13:26

Re: Regulärer Ausdruck für natürliche Zahlen
 
Funktioniert irgendwie nicht. Also ich hab es so:

Delphi-Quellcode:
      RE.Expression := '(\d*)[^\.]+';
      expression := RE.Replace(expression, '$1.', True);
Da wird 30 durch 3 ersetzt, bei einstelligen Zahlen kommen ganz verrückte Dinge heraus... :|

Habs jetzt dirty gelöst, indem ich das sozusagen für Zahlen verschiedener Anzahl an Vorkomma- und Dezimalstellen einzeln betrachte. :zwinker: Allerdings würde mich trotzdem noch interessieren, wie eine saubere Lösung aussieht (dass der Zusammenhang klar wird: Jede nat. Zahl soll durch eine Dezimalzahl mit dem gleichen Wert ersetzt werden, also 1 durch 1. oder 1.0. Wegen PascalScript :mrgreen: ).

@Daniel: Problem ist halt, dass die PascalScript bei 3/2 1 herausbekommt, deshalb möchte ich das so ersetzen, dass dann 3./2. da steht (3. = 3.0 und 2. = 2.0), damit die PascalScript 1.5 herausbekommt.

Dax 23. Okt 2008 13:28

Re: Regulärer Ausdruck für natürliche Zahlen
 
Ausdruck:
Code:
"(?<!\.)(?>(\d+))(?!\.)
Erklärung: beliebig viele Digits, die weder einen Punkt vor noch nach sich haben (Lookahead, -behind). Das (?>) ist eine atomic group, die dafür sorgt, dass in \d+ nicht nochmals eingetreten wird - wäre die Gruppe nicht atomar, würde "123.4" durch "12.3.4" ersetzt werden.

Jakob Ullmann 23. Okt 2008 21:53

Re: Regulärer Ausdruck für natürliche Zahlen
 
Puh, ich glaube bei dem Anblick sollte ich meine PCRE-Kennnis noch einmal auffrischen. :shock: Dank dir! :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 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