![]() |
AW: Text aus einem Richedit kopieren
Zitat:
Hallo shebang, das war zwischenzeitlich tatsächlich auch eine Idee, der ich nachgehen wollte - jedoch aus Nichtwissen, wie Regular Expressions aufgebaut sind - wieder verworfen habe. Regular Expressions sind einfach grauenhaft. Mir erschließt sich nicht im Ansatz, wie man sich an so einer Zeichenfolge erfreuen kann - und, wie man diese erstellt. Und ja, ich habe viele Erklärungen gelesen - aber nicht verstanden. Das ist wie höhere Mathematik für einen normalen Drittklässler. Da kann man noch so viel versuchen zu erklären - es wird nichts helfen. Übrigens, die RegExp, die Du mir gegeben hast, findet nur die Namen. Die Jahreszahlen müssten auch noch mit rein ;-) LG Mathias. |
AW: Text aus einem Richedit kopieren
Es gibt schöne Online-Tools, die geben eine detailierte Erklärung zur verwendeten RexExp, zusätzlich viele Hilfen
und vorallem eine Testumgebung. z.B. ![]() Lookarounds sind für Viele auch bissl schwer zu verstehen. Im Prinzip ist das eine Suche, die aber im Endergebnis nicht enthalten sein wird. ![]()
Delphi-Quellcode:
sagt eigentlich nur
(?<=\[\[).*(?=\]\])
Delphi-Quellcode:
.
suche nach "[[" und "]]" und gib mir Alles dazwischen
Da du hier aber zwei Dinge finden willst, ist das eh unnötig kompliziert und garnicht nutzbar. (denn der Teil zwischen den beiden Suchstückchen kann/muß ja im Match drin sein) ![]()
Delphi-Quellcode:
\[\[(.*)\]\] \((.*)\)
Suche nach "[[" , "]] (" und ")" nimm das dazwischen mit und gib mir das, was innerhalb der Gruppen (...) steht. Hier steht das Ergebnis dann zwar nicht direkt im "Match"-String drin, aber in den Groups kannst du alles finden. |
AW: Text aus einem Richedit kopieren
@NoGAD:
kannst du bitte nochmal "exakt" beschreiben was das resultat sein sollte? wenn ich post #1 lese kommt bei mir im endeffekt raus das du eine zeile kopiert haben möchtest aber es sind doch bereits zeilen? (von ": [[" bis ": [[") also gebe mal ein konkreteres beispiel wie der input aussieht und wie du dir vorstellst das der output aussehen soll. (verweise nicht auf externe quellen sondern copy/paste etwas hier rein) oder geht es wieder darum code zu reparieren anstelle eine eigenentwicklung vorzustellen? (ich würde TMemo oder TStringList nehmen, einfacher in der Handhabung) |
AW: Text aus einem Richedit kopieren
In einem String kommt n-mal :[[ vor.
Je Vorkommen von :[[ soll alles von :[[ bis vor dem nächsten :[[ als separate Zeichenfolge ausgegeben werden. aus z. B.
Code:
mache
:[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr
]]:[[und nochwas]]
Code:
:[[a]]
:[[xyz irgendwas mehr oder weniger langes]] :[[b]] :[[noch mehr]] :[[und nochwas]] |
AW: Text aus einem Richedit kopieren
Wenn alle/viele Matches in einer Zeile vorkommen, dann muß man noch etwas am MultiLine und Gready rumspielen.
* Gready nimmt standardmäßig so viel wie möglich, vom ersten Anfang, bis zum letzten Ende (Ungready: von einem Anfang bis zum nächsten Ende) * und "." stoppt oftmals standardmäßig an Zeilenumbrüchen (drum war Gready hier egal, da es pro Zeile nur einen Anfang und ein Ende gab) |
AW: Text aus einem Richedit kopieren
@Delphi.Narium:
Sehr gut formuliert, damit konnte ich was anfangen. Das kam bei mir raus. Erfüllt es die Anforderungen?
Delphi-Quellcode:
program Project13;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Classes; { input: :[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr ]]:[[und nochwas]] output: :[[a]] :[[xyz irgendwas mehr oder weniger langes]] :[[b]] :[[noch mehr]] :[[und nochwas]] } var input: TStringList; output: TArray<string>; cArr: array[0..0] of string; i: Integer; derText: string; begin try {wandel input in einen langen string um} input := TStringList.Create; input.Add(':[[a]]:[[xyz irgendwas mehr oder weniger langes]] :[[b]]:[[noch mehr'); input.Add(']]:[[und nochwas]]'); for I := 0 to input.Count - 1 do derText := derText + Input[i]; input.Free; {splitte string wieder} cArr[0] := ':[['; output := derText.Split(cArr); for i := 1 to High(output) do output[i] := ':[[' + output[i]; {schreibe resultat} for i := Low(output) to High(output) do WriteLn(output[i]); ReadLn; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; end. |
AW: Text aus einem Richedit kopieren
![]() ![]() ![]() |
AW: Text aus einem Richedit kopieren
Hallo ihr Lieben!
Seid mir bitte nicht böse, aber Reguläre Ausdrücke verstehe ich einfach nicht. Das ist mir zu kompliziert, zu abstrakt. Nebenbei: 3 verschiedene Versionen von RegExp? ::roll:: Außerdem ist es hier für mein aktuelles Anliegen nicht nutzbar, wie ich meine. Zitat:
Das ist ein Ausschnitt des Textes, welchen ich versuche zu parsen: (HTML-Quellcode von ![]()
Code:
Im Weiteren Verlauf parse ich dann diesen Text, um ein Array zu bilden, um dann dies zu bekommen:
<!DOCTYPE html>
<html class="client-nojs" lang="de" dir="ltr"> <head> <meta charset="UTF-8"/> [COLOR="Yellow"]{ Schnipp Schnapp, hier habe ich viel HTML gelöscht }[/COLOR] id="wpScrolltop" type="hidden" name="wpScrolltop"/><input type="hidden" value="d41d8cd98f00b204e9800998ecf8427e" name="wpAutoSummary"/><input type="hidden" value="0" name="oldid"/><input type="hidden" value="210416705" name="parentRevId"/><input type="hidden" value="text/x-wiki" name="format"/><input type="hidden" value="wikitext" name="model"/><textarea aria-label="Wikitext-Editor" tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" class="mw-editfont-monospace" lang="de" dir="ltr" name="wpTextbox1">__NOTOC__ {{SubTOC|Titel=Liste von Autoren|Index=Liste von Autoren}} [COLOR="Red"]{ Ab hier besteht mein Interesse, alle Angaben heraus zu filtern }[/COLOR] [COLOR="red"]{ Ich benötige dazu die Namen, Die Jahresangaben und das Land (Alle Werte, soweit verfügbar)}[/COLOR] == Aa == : [[Bertus Aafjes]] (1914–1993), NL : [[Jeppe Aakjær]] (1866–1930), DK : [[Johannes Aal]] (um 1500–1551), CH : [[Hans Aanrud]] (1863–1953), NO : [[Emil Aarestrup]] (1800–1856), DK : [[Soazig Aaron]] (* 1949), FR : [[Ivar Aasen]] (1813–1896), NO == Ab == : [[Petrus Abaelardus]] (1079–1142), FR {[.. ff ..]}
Delphi-Quellcode:
Authors_German: array [1 .. 3711, 1 .. 3] of string = (
(('Bertus Aafjes'), ('1914–1993'), ('NL')), (('Jeppe Aakjær'), ('1866–1930'), ('DK')), (('Johannes Aal'), ('um 1500–1551'), ('CH')), (('Hans Aanrud'), ('1863–1953'), ('NO')), (('Emil Aarestrup'), ('1800–1856'), ('DK')), (('Soazig Aaron'), ('1949'), ('FR')), (('Ivar Aasen'), ('1813–1896'), ('NO')), (('Petrus Abaelardus'), ('1079–1142'), ('FR')), [COLOR="Yellow"]{ Schnipp Schnapp }[/COLOR] Und nochmal der Hinweis: Es funktioniert ja inzwischen, Dank der Hilfe von Delphi.Narium. Der Code für das Kopieren der Namen ist folgende funtion:
Delphi-Quellcode:
function TForm6.SearchForText(sText: String; SearchTextA, SearchTextB: string; var Dummy_StringList: TStringList): boolean;
var sName: String; iPos1: Integer; iPos2: Integer; iPos3: Integer; begin { -- THX@Delphi.Narium und KodeZwerg https://www.delphipraxis.net/1486806-post5.html -- } if (Pos(SearchTextA, sText) = 0) or (Pos(SearchTextB, sText) = 0) then exit; sText := sText + SearchTextB; Dummy_StringList.Clear; try while (sText.Length > 0) and (sText <> SearchTextB) do begin iPos1 := Pos(SearchTextA, sText); iPos2 := Pos(SearchTextB, sText, iPos1 + Length(SearchTextA)); sName := Trim(Copy(sText, iPos1, iPos2 - 1)); iPos3 := Pos(slinebreak, sName); if iPos3 > 0 then sName := Trim(Copy(sName, 1, iPos3 - 1)); if (sName.Length > 0) and (sName <> SearchTextA) and (sName <> SearchTextB) then Dummy_StringList.Add(sName); sText := Copy(sText, iPos2, Length(sText)); end; finally result := true; end; end; // Aufruf der Function: var Dummy_StringList: TStringList; Dummy_String: String; begin RichEdit2.Clear; Dummy_StringList := TStringList.Create; Dummy_String := RichEdit1.Text; if SearchForText(Dummy_String, Author_From, Author_From, Dummy_StringList) then RichEdit2.Lines.AddStrings(Dummy_StringList); Dummy_StringList.Free; end; LG Mathias :-) |
AW: Text aus einem Richedit kopieren
Zitat:
2. das klingt super, dann ist das thema ja durch und man braucht sich keine weiteren gedanken mehr machen :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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-2025 by Thomas Breitkreuz