RegExp

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

RegExp

Beitrag 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!
Zuletzt geändert von Olafmagne am 10.04.2021 13:52, insgesamt 1-mal geändert.
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: RegExp

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: RegExp

Beitrag von Olafmagne »

Merci


olaf
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: RegExp

Beitrag von NicTheQuick »

Das + kann eigentlich auch weg. Es reicht ja, wenn am Anfang nur ein Buchstabe matcht.
Bild
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: RegExp

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6996
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: RegExp

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Olafmagne
Beiträge: 130
Registriert: 07.12.2017 17:30
Wohnort: Sete/Frankreich

Re: RegExp

Beitrag 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
Unsinnige Anweisungen von Seiten des Chef's lösen grundsätzlich ein "Syntax Error" bei mir aus
OS=Windows 11
PB=5.31/5.73/6 <> BlitzPlus/Blitz3D <> FreeBasic
Antworten