Seite 1 von 1

RegExp

Verfasst: 10.04.2021 13:39
von Olafmagne
Hallo

ich habe eine Frage bezüglich RegularExpressions

ich möchte aus einem Text Ausdrücke mit folgender Defination finden

Code: Alles auswählen

([a-zA-z]+[a-zA-z0-9]*[£,\$,€])
Also alles, das mit mindestens einem Buchstaben beginnt, gefolgt von 0 oder mehr Buchstaben oder Zahlen,
und beendet von einem der folgenden Währungszeichen $£€
Ein Match soll nur erfolgen, wenn es sich um ein ganzes Wort handelt, Mathematische Zeichen oder Satzzeichen können
ohne Whitespace folgen oder vorrangehen.
also sowas
fdghs.usd$ bmsf ->Match
aze 45gb£ ->kein Match

Was muss ich nun am Pattern ändern, damit die o.A. Bedingungen erfüllt werden?
Mit \b muss ein whitespace vorrangehen
[^0-9] zb gibt bei '54gb£' dann 'gb£' zurück, was nicht erwünscht ist

für Hilfe bin ich Dankbar

Olaf

Ups hab vergessen zu Erwähnen, dass es mit dem Compiler 5.31, unicode diabled laufen muss!

Re: RegExp

Verfasst: 10.04.2021 13:52
von STARGÅTE
So sollte es reichen:

Code: Alles auswählen

\b[a-zA-Z]+[a-zA-Z0-9]*[£$€](?!\w)
(das vorangestellt \b verhindert, dass b$ in 6b$ matched und das (?!\w) am Ende verhindert, dass b$ in b$b matched)

Beispiel:

Code: Alles auswählen

If CreateRegularExpression(0, "\b[a-zA-Z]+[a-zA-Z0-9]*[£$€](?!\w)")
	Define Dim Result$(0)
	Define NbFound = ExtractRegularExpression(0, "aze 45gb£ z98z€ usd$ z", Result$())
	Define k
	For k = 0 To NbFound-1
		Debug Result$(k)
	Next
Else
	Debug RegularExpressionError()
EndIf

Re: RegExp

Verfasst: 10.04.2021 13:59
von Olafmagne
Merci


olaf

Re: RegExp

Verfasst: 10.04.2021 19:31
von NicTheQuick
Das + kann eigentlich auch weg. Es reicht ja, wenn am Anfang nur ein Buchstabe matcht.

Re: RegExp

Verfasst: 15.04.2021 15:10
von Olafmagne
Hallo,
ich habe noch mal eine Frage, ich werde aus der Dokumenten zu dem Thema nicht schlau.

der oben gepostete Code ist ja ok, aber wenn ich das "$£€§.."-Zeichen vorranstellen möchte,
wird es ignoriert

Code: Alles auswählen

\b[£$€][a-zA-Z][a-zA-Z0-9]*(?!\w)
Ausserdem habe auch noch nicht herrausgefunden, wie ein Quote, ' " ' darzustellen ist.

Ich möchte damit Ausdrücke definieren, die auch ' Space ' enthalten und möchte kein ' _ 'verwenden

Re: RegExp

Verfasst: 15.04.2021 16:19
von STARGÅTE
Das "\b" ist eine Wortgrenze, also der Übergang von einem Zeichen in "\w" zu einem Zeichen welches nicht in "\w" ist.
Die Zeichen [£$€] sind aber keine Buchstaben in einem Wort, somit würde dein Ausdruck nur matchen, wenn vor dem [£$€] wieder ein echter Buchstabe kommt.
Du müsstest dann hier auch mit Lookbehind arbeiten:

Code: Alles auswählen

(?<!\w)[£$€][a-zA-Z][a-zA-Z0-9]*(?!\w)
Ein doppeltes Anführungszeichen kannst du so einbauen:

Code: Alles auswählen

Debug ~"das hier \" "
Beachte dann aber, dass alle \ in einem Regex widerum ein weiteres \ vorrangestellt werden muss.
Alternativ beendest du den String einfach und fügst #DOUBLEQUOTE$ dazwischen:

Code: Alles auswählen

Debug "Test"+#DOUBLEQUOTE$+" Ende"
Ein Space ist in Regex einfach ein normales Space oder alternativ das "\s", was dann auch auf andere Leerstellen die Tabs passt.

Re: RegExp

Verfasst: 15.04.2021 17:52
von Olafmagne
Ahh Ja---

'nu kappier' ich dat'

also das mit dem LookBehind

manche Englische ausdrücke sind mir nicht unbedingt geläufig,
so das das nicht immer klar verständlich ist.

Nun Vielen Dank, werde sehen, was ich damit alles Anstellen kann