![]() |
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:
Das Problem liegt scheinbar daran, dass der Teil
(\d*)[\.]{0}
Delphi-Quellcode:
falsch ist. Aber wie kann man das richtig machen? Hat jemand eine Idee? (Komma ist hier der Punkt, nicht das Komma.)
[\.]{0}
EDIT: Ich meine nicht, dass ein String eine natürliche Zahl ist, sondern dass in einem String eine natürliche Zahl vorkommt. |
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. |
Re: Regulärer Ausdruck für natürliche Zahlen
Hi,
Zitat:
Wenn ja, würde ich sowas denken:
Delphi-Quellcode:
Grüße,
(\d*)[^\.]+
Chris |
Re: Regulärer Ausdruck für natürliche Zahlen
Funktioniert irgendwie nicht. Also ich hab es so:
Delphi-Quellcode:
Da wird 30 durch 3 ersetzt, bei einstelligen Zahlen kommen ganz verrückte Dinge heraus... :|
RE.Expression := '(\d*)[^\.]+';
expression := RE.Replace(expression, '$1.', True); 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. |
Re: Regulärer Ausdruck für natürliche Zahlen
Ausdruck:
Code:
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.
"(?<!\.)(?>(\d+))(?!\.)
|
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 21:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz