AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

regulärer Ausdruck

Ein Thema von videlius · begonnen am 24. Sep 2015 · letzter Beitrag vom 24. Sep 2015
Antwort Antwort
videlius

Registriert seit: 27. Mär 2015
6 Beiträge
 
#1

regulärer Ausdruck

  Alt 24. Sep 2015, 14:08
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!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:15
Ersetzte es mal mit der entsprecehnden Wertemenge:

^|[ ]+baum[ ]\s+
Markus Kinzler
  Mit Zitat antworten Zitat
videlius

Registriert seit: 27. Mär 2015
6 Beiträge
 
#3

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:22
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?
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:23
Wie sieht es dann mit dem Wort "Baumaßnahme" aus? Darf das gefunden werden? Oder muss Baum ein abgeschlossenes Wort sein?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:26
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 [ .,].
Markus Kinzler
  Mit Zitat antworten Zitat
videlius

Registriert seit: 27. Mär 2015
6 Beiträge
 
#6

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:43
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?
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#7

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 14:52
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?
Mike
Passion is no replacement for reason

Geändert von JasonDX (24. Sep 2015 um 14:54 Uhr)
  Mit Zitat antworten Zitat
SMO

Registriert seit: 20. Jul 2005
178 Beiträge
 
Delphi XE6 Professional
 
#8

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 15:35
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".
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 15:35
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.
  Mit Zitat antworten Zitat
videlius

Registriert seit: 27. Mär 2015
6 Beiträge
 
#10

AW: regulärer Ausdruck

  Alt 24. Sep 2015, 21:09
Na super, \bbaum\b reicht völlig aus. Die Zeichenklasse kannte ich noch nicht.
Vielen Dank für Eure Mühen.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:49 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