Reguläre Ausdrücke für Sonderzeichen und Zahlen?

3 Antworten

unter Andrem Bezug nehmend auf Deinen Kommentar:

Wenn ich dann ein Buchstaben zwischen meine Zahlen schreibe, dann bricht er ab das heißt er macht aus 300.a000 = 300.

Regex ist nur für die Erkennung eines Zeichenmusters zuständig. Irgendewas ersetzen/weglassen/selektieren kann es nicht.

Dein Denkfehler: Du möchtest aus einem bestehenden Text bestimmte Dinge auswählen/einlesen.

Viel einfacher ist es zu sagen, was was aus einem bestehenden Text (nicht) entfernt gelöscht werden soll werden soll. Für Ersetzungen sind die von der jeweiligen verwendeten Programmiersprache zur Verfügung stehenden (RegEx)replace Methoden/Operatoren zuständig

***Alle Beispiele in der Powershell (auf allen Windowssystemen direkt verfügbar). (Geht ähnlich in jeder andren Sprache)

entferne alle Katzen :

$Text = 'Katze Hund 
Katze Esel Katze Frosch'
$Text -replace  'Katze',$Null

Ersetze im AusgangsString alle Zeichen, welche keine Ziffer sind durch Nichts.

'300.a000' -replace '\D'
#Ergebnis: 300000
wenn man eine Zahl gemischt mit Buchstaben hat sollen nur die Zahlen/sonderzeichen ausgelesen werden, also 300.a000,1 = 300.000,1

Sonderzeichen ist ein sehr weit gefasster Begriff. Im Prinzip ist so ziemlich alles was Kein Buchstabe/Ziffer ist.

RegEx muss man recht genau sagen was es matchen soll und was nicht. Wenn Du nur Buchstaben entfernen möchtest (dann bleiben alle Sonderzeichen und Ziffern bestehen...)

'300.a000,1 ()+-*/{}' -replace '[a-zA-Z]'

#Ergebnis: 300.000,1 ()+-*/{}

Wenn du feingliedriger arbeiten willst ist, es vielleicht besser zu sagen, was Du behalten /nicht ersetzen möchtest.

...ersetze alles was [keine Ziffern, Punkt, Komma] ist durch Nichts.

'300.a000,1 ()+-*/{}' -replace '[^\d\.,]'
#Ergebnis: 300.000,1

natürlich kannst Du auch durch was anderes als nichts ersetzen:

'300.a000,1 ()+-*/{}' -replace '[^\d\.,]','#blubb#'
#Ergebnis: 300.#blubb#000,1#blubb##blubb##blubb##blubb##blubb##blubb##blubb##blubb##blubb#

Das geht nicht. Du kannst nicht 300.a000,1 übergeben und den Regex 3000.000,1 ausgeben lassen. Du kannst aber mehrere matches machen und die dann wieder kombinieren, mit einer Programmiersprache deiner Wahl. Mit reinem Regex geht es nicht.

Beispiel: [^A-Za-zÄäÜüÖö]+

Dann bekommst du bei 300.a000,1 das Ergebnis: 300. und 000,1

Dann mit einer Programmiersprache deiner Wahl zusammensetzen und dann wäre es 300.000,1

Nachtrag:

Oder, was auch geht mit "nur" Regex (fällt mir gerade so ein): Regex Replace.

Such nach [A-Za-zÄäÜüÖö]+ und ersetze das mit "" (nichts / Leerstring). Dann steht da auch 300.000,1als Ergebnis

BONEz851 
Fragesteller
 10.08.2023, 14:22

alles klar

0

Du kannst einfach im ersten Schritt alle Buchstaben durch nen leeren String ersetzen - und dann das Ergebnis einlesen.