AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Muster in String

Ein Thema von Monday · begonnen am 27. Nov 2015 · letzter Beitrag vom 29. Nov 2015
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#21

AW: Muster in String

  Alt 29. Nov 2015, 10:48
So richtig explizit wurde es nicht gesagt, darum muss man hier ein wenig interpretieren.

Ein Muster wird dargestellt in einer Kombination aus Platzhaltern und Zeichen.
  • * => 0-n Zeichen
  • ? => genau ein Zeichen
Ein Muster das mit *? startet oder mit ?* endet ist nicht zulässig.

Ein Muster liegt dann vor, wenn in einer gegebenen String-Menge in allen Strings Zeichen an einer beliebigen Stelle im gleichen Abstand vorkommen. Das Muster selber muss mindestens 2 Zeichen breit sein (Platzhalter werden nicht mitgezählt).

Beispiel:

Die gegebene String-Menge
Code:
1234567890
blhe1234j6
f1234k67id
und die (in allen Strings) vorkommenden Muster:
Code:
*12*
*1?3*
*1??4*
*123*
*1?34*
*12?4*
*1234*
*1????6*
*12???6*
...
*123??6*
*1234?6*
Das längste Muster ist das Muster, wo die Musterbreite abzüglich der Platzhalterzeichen ein Maximum aufweist. Dieses könnten aber auch mehrere Muster sein.

In dem Beispiel wäre das *1234?6*
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#22

AW: Muster in String

  Alt 29. Nov 2015, 11:00
Ich hab bloß den Eindruck, das hier viele Muster lesen und dann gleich "Muster - Suchmuster - Regulärer Ausdruck" denken, während die Beispiele imho gar nicht so aussehen.
Ein Muster wird dargestellt in einer Kombination aus Platzhaltern und Zeichen.
Genau das meinte ich

Nicht jedes "Muster" was jemand finden möchte ist regulär, und dem TE geht es explizit um eine bestimmte Art von Gemeinsamkeiten zwischen zwei Strings, wobei die konkreten Zeichen nicht feststehen. Wahrscheinlich ist der Begriff "Muster" an der Stelle einfach irreführend.

Ich weiß nicht, welches Muster es ist oder wie lange, ich weiß nur das in beiden Strings eine Zeichenfolge/Muster (im Beispiel 123) gleich sind. Und möchte herausfinden, welcher es ist.

So lange der TE diese Definition nicht liefert, ist jeder weitere Kommentar dazu reinste Spekulation.
Jup, wobei es auch sein könnte das der TE auch nicht genau weiß was er eigentlich möchte
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#23

AW: Muster in String

  Alt 29. Nov 2015, 11:16
So lange der TE diese Definition nicht liefert, ist jeder weitere Kommentar dazu reinste Spekulation.
Jup, wobei es auch sein könnte das der TE auch nicht genau weiß was er eigentlich möchte
Diesem Eindruck kann ich mich ebenfalls nicht verschließen. Bei gefühlt 30% der Anfragen muß man erst einmal herauszufinden suchen, was der Fragesteller eigentlich erreichen möchte – und ich spreche jetzt nicht von den Fällen, in denen der Fragesteller mehr oder weniger absichtlich falsch verstanden wird oder dessen Thread in eine Richtung drängt, die stark von der Fragestellung abweicht und am Ende nichts mehr damit zu tun hat.

Selbstverständlich möchte ich hier keinem den Spaß & die Freude daran, sich über ein be- oder geliebtes Thema auszulassen, verderben
Die eigentliche, bislang unvollständige Frage wird auf diese Weise und ohne weitere Erklärungen des TE jedoch nicht wirklich einer Lösung nähergebracht
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#24

AW: Muster in String

  Alt 29. Nov 2015, 11:26
Jetzt hab ich was geschrieben, das wohl auch funktioniert. Vielleicht kann das auch jemand so gebrauchen:

Zum Testen eine Form mit Memo1 und Button1. Der . dient als Platzhalter.

Code:
function vergleich(erster,zweiter: string): string;
var
  a: integer;
begin
  Result := '';

  if length(erster) <> length(zweiter) then begin Result := ''; exit; end;

  for a := 1 to Length(erster) do begin
    if erster[a] = zweiter[a] then begin
      Result := Result+erster[a];
    end;
    if erster[a] <> zweiter[a] then begin
      Result := Result+'.';
    end;
  end;
end;

function mustersuche(erster, zweiter: string): string; // Eigentliche FUnktion
var
  a,max: integer;
  temp_zweiter,temp, anzeige,muster_temp: string;
begin
 temp := '';
 for a := 1 to Length(erster) do begin  temp := temp + '.'; end;

 temp_zweiter := temp + zweiter + temp;
 max := length(temp_zweiter)-length(temp);

  for a := 0 to max-1 do begin
     Delete(temp_zweiter, 1, 1);
     anzeige := Copy(temp_zweiter,1,length(temp));

     muster_temp := vergleich(erster,anzeige);
     muster_temp := StringReplace(muster_temp, '.', '', [rfReplaceAll, rfIgnoreCase]);
     if muster_temp <> '' then begin
       Form1.Memo1.Lines.Add(anzeige + ' Gefundenes Muster -> '+ vergleich(erster,anzeige)); // Nur Treffer ansehen
     end;
     //Form1.Memo1.Lines.Add(anzeige + ' Gefundenes Muster -> '+ vergleich(erster,anzeige)); //kompletten vorgang ansehen
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  mustersuche('a1b2cd3ef','ghi1j2kl3'); // ergibt => .1.2..3..
  mustersuche('a123bcdef','ghij123kl'); // ergibt => .123.....

  ShowMessage('Fertig');
end;
  Mit Zitat antworten Zitat
Monday

Registriert seit: 24. Aug 2012
103 Beiträge
 
FreePascal / Lazarus
 
#25

AW: Muster in String

  Alt 29. Nov 2015, 11:38
Ich wusste nicht das der Begriff "Muster" solche Verwirrungen auslöst. Es ist manchmal Schwierig es genau zu definieren, deshalb auch die Beispiele damit es einfacher ist zu verstehen. Ist Muster/Suchmuster/Gemeinsamkeiten/Kombinationen nicht einfach nur Begrifflichkeiten die in etwa dasselbe ausdrücken? Mir schien der Begriff Muster hier verständlich. Vielleicht könnte man diese Aufgabe auch mit regulären Ausdrücken lösen - ich weiß es nicht - dazu kenne ich mich mit regulären Ausdrücken zuwenig aus.
  Mit Zitat antworten Zitat
Namenloser

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

AW: Muster in String

  Alt 29. Nov 2015, 19:31
Erinnert mich an "diff", bloß mit einzelnen Zeichen statt Zeilen. "Longest common subsequence" wurde hier schon genannt und kommt auf das gleiche raus, aber ich wollte es trotzdem noch mal in den Raum werfen. Das Beispiel in dem verlinkten Abschnitt finde ich auch recht anschaulich. Du suchst im Grunde genau die Stellen, die dort freigelassen wurden.
  Mit Zitat antworten Zitat
D-User

Registriert seit: 19. Dez 2006
Ort: NRW
56 Beiträge
 
#27

AW: Muster in String

  Alt 29. Nov 2015, 23:40
apropos Muster:

suchen die bei Seti Project nicht auch ein Muster in einem etwas längeren String?
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 02:29 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