Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi regulärer Ausdruck (https://www.delphipraxis.net/186719-regulaerer-ausdruck.html)

videlius 24. Sep 2015 13:08

regulärer Ausdruck
 
Hallo,

ich brauche einen regulären Ausdruck der nach dem Wort 'baum' sucht. Dabei darf das Wort 'baum' am Anfang des Textes oder mittendrin stehen. Wenn es mittendrin steht muss
unbedingt ein Steuer- oder Leerzeichen vorher kommen. Nach dem Wort muss ebenfalls mindestens ein Steuer- oder Leerzeichen kommen.

Mein erster Versuch sieht so aus

regulärer Ausdruck: ^|\s+baum\s+

'Ein baum steht im Wald' - OK
'baum auf der Straße' - OK
' baum auf der Straße' - OK
'Einbaum steht im Wald' - String wird gefunden -> nicht OK

Im letzten Fall dürfte der String nicht gefunden werden, da weder ein Steuer- bzw. Leerzeichen vor 'baum' steht, noch der Ausdruck am Anfang des Textes steht.

Hat jemand vielleicht eine Idee wie man den regulären Ausdruck umformulieren muss?

Danke!

mkinzler 24. Sep 2015 13:15

AW: regulärer Ausdruck
 
Ersetzte es mal mit der entsprecehnden Wertemenge:

^|[ ]+baum[ ]\s+

videlius 24. Sep 2015 13:22

AW: regulärer Ausdruck
 
Also in die eckigen Klammern sollen alle Zeichen der Zeichengruppe s hinein? Hab ich das richtig verstanden? Wo bekomme ich denn die Zeichen alle her?

Aviator 24. Sep 2015 13:23

AW: regulärer Ausdruck
 
Wie sieht es dann mit dem Wort "Baumaßnahme" aus? Darf das gefunden werden? Oder muss Baum ein abgeschlossenes Wort sein?

mkinzler 24. Sep 2015 13:26

AW: regulärer Ausdruck
 
Zitat:

Zitat von videlius (Beitrag 1316849)
Also in die eckigen Klammern sollen alle Zeichen der Zeichengruppe s hinein? Hab ich das richtig verstanden? Wo bekomme ich denn die Zeichen alle her?

Nein alle Zeichen, welche an dieser Stelle erlaubt sein sollen. In Deinem Fall das Leerzeichen und wohl auch , und , also [ .,].

videlius 24. Sep 2015 13:43

AW: regulärer Ausdruck
 
Ok als erlaubt wäre vor dem Wort das Leerzeichen, Tabulator und Enter.
Zweiter Versuch:

^|[ \t]+baum[ \t]\s+

Wie bekomme ich das Enter in die Klammer? #13 ist wahrscheinlich nicht richtig und
warum muss nach dem Wort nochmals die eckige Klammer stehen? Alle erlaubten Zeichen werden doch schon durch die Zeichengruppe s definiert?

JasonDX 24. Sep 2015 13:52

AW: regulärer Ausdruck
 
Ich bin mir bei Operator-Prioritäten in RegExen nicht sicher, aber hilft vllt das hier?
Code:
(^|\s+)baum\s+
Wie gesagt, ich bin nicht sicher, aber wenn mich meine Erinnerung nicht betrügt, dürfte die implizite Klammerung so aussehen:
Code:
^|(\s+baum\s+)
PS: Was ist wenn Baum am Ende steht?

SMO 24. Sep 2015 14:35

AW: regulärer Ausdruck
 
Das geht doch viel einfacher!
Für Wortgrenzen gibt's eine eigene Zeichenklasse, gewöhnlich "\b". Je nach Regexp-Dialekt vielleicht auch anders (z.B. "\y" in Tcl).

Also:
Code:
\bBaum\b
Schlägt an bei "Baum fällt", "Der Baum ist groß", "Ich sehe den Baum", aber nicht bei "Baumaßnahmen".

Namenloser 24. Sep 2015 14:35

AW: regulärer Ausdruck
 
Probier es mal mit \bbaum\b

http://www.regular-expressions.info/wordboundaries.html


^|\s+baum\s+ funktioniert nicht, weil es geparst wird als (^)|(\s+baum\s+). Somit trifft der Ausdruck auf jeden String zu.

videlius 24. Sep 2015 20:09

AW: regulärer Ausdruck
 
Na super, \bbaum\b reicht völlig aus. Die Zeichenklasse kannte ich noch nicht.
Vielen Dank für Eure Mühen. :thumb:


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