![]() |
TRegExpr begrenzt nicht
Hallo,
ich möchte einen Text (siehe unten) in verschiedene Teile zerlegen. Ich habe mir eine Mini-Expr. gebastelt (zum Test). Diese enthält eine Gruppe zwischen zwei festen Zeichen-Gruppen:
Code:
An das, was in den Klammern ist, möchte ich ran! Problem ist jetzt, dass diese Art von Zeilen beliebig oft vorkommen. Und die RegExpr-Engine macht folgendes: Sie packt von Fundstelle-1 alles bis zur letzten Fundstelle in ein Match, egal ob diese Fundstellen öfter vorkommen. Hier mal mit Text und Result:
pntext\\f0\s(.+)\\tab
Text:
Code:
Result:
{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil Tahoma;}{\f1\fnil\fcharset0 Tahoma;}}
\viewkind4\uc1\pard\f0\fs16 RichEdit1 \par \pard{\pntext\f0 A.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart0\pnucltr{\pntxta.}} \f1 asdasd\f0 \par \pard{\pntext\f0 I.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnucrm{\pntxta.}} \li200\f1 asdsad\f0 \par \pard{\pntext\f0 1.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pndec{\pntxta.}} \li400\f1 asdasd\f0 \par \pard{\pntext\f0 a)\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnlcltr{\pntxta)}} \li600\f1 asdasd\f0 \par }
Code:
gewünschtes Ergebnis:
A.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart0\pnucltr{\pntxta.}}
\f1 asdasd\f0 \par \pard{\pntext\f0 I.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pnucrm{\pntxta.}} \li200\f1 asdsad\f0 \par \pard{\pntext\f0 1.\tab}{\*\pn\pnlvlbody\pnf0\pnindent0\pnstart1\pndec{\pntxta.}} \li400\f1 asdasd\f0 \par \pard{\pntext\f0 a) A. B. C. usw. Was mache ich falsch? Die Quelle ist übrigens eine RTF (aus Richedit), welche in einem StringStream für RegExp gespeichert ist. [EDIT]Speichere ich den StringStream wiederum in einem Memo und gehe dann in einer Schleife Zeile für Zeile durch, funktioniert das perfekt... Möchte aber ungerne einen StringStream und dann auch noch eine StringList benutzen... [/EDIT] Bitte um Hilfe! |
Re: TRegExpr begrenzt nicht
Hi,
das Ergebnis ist völlig korrekt (da die RegExp anscheinend im 'gefrässigen' (greedy) Modus arbeitet): finde etwas was mit pntext beginnt, gefolgt von \f0 gefolgt von einem Whitespace gefolgt von mindestes einem beliebigen Zeichen gefolgt von eine \tab. Dein Ergebnis ist der maximal mögliche Treffer! Schau mal, ob die Engine einen Schalter hat, mit dem man den Greedy-Mode ausschalten kann. Probier's mal mit
Code:
Grüße,
pntext\\f0\s(.+?)\\tab
Uli |
Re: TRegExpr begrenzt nicht
Nein :wall:
Ja, die Engine hat diesen Schalter, ich vergesse ihn immmer und immer wieder! Ich danke dir - Funktioniert natürlich!!! Danke! :bouncing4: |
Re: TRegExpr begrenzt nicht
Eine andere Variante wäre folgender Schalter...
Delphi-Quellcode:
RegExpr.ModifierG:=false;
|
Re: TRegExpr begrenzt nicht
Ja, den habe ich letztenende gesetzt ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz