AGB  ·  Datenschutz  ·  Impressum  







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

Muster in String

Ein Thema von Monday · begonnen am 27. Nov 2015 · letzter Beitrag vom 29. Nov 2015
Antwort Antwort
Monday

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

AW: Muster in String

  Alt 28. Nov 2015, 21:01
Ja ich meine das so wie Sir Rufo es auch gesehen hat. Das "usw." sollte nur heißen, dass eben verschiedene Muster möglich sind und nicht exakt so aussehen wie in dem Beispiel.

Und ja, ich dachte an die längste Musterkette.

Ich habe inzwischen die Idee, dass man einen der String durch den anderen von links nach rechts durchlaufen lässt und dann die Zeichen vergleicht. Irgendwann müsste sich dann theoretisch das Muster herauskristalisieren. Evtl. reicht es auch einen der Strings nach Rechts und nach Links zu schieben. Ich weiß nicht, ob die Idee verständlich ist. Bin gerade über den Code, aber habe noch nichts lauffähiges das ich zeigen kann.

(Anwendung: In einem Analyseprogramm, dass solche Zeichenfolgen ausgibt, will ich so Auffälligkeiten in der Ausgabe finden.)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Muster in String

  Alt 28. Nov 2015, 21:47
Ich werfe noch mal reguläre Ausdrücke in die Runde.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
SMO

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

AW: Muster in String

  Alt 28. Nov 2015, 23:26
Und ich werfe mal längster gemeinsamer Substring in die Runde.
Denn wenn ich Monday recht verstehe, möchter er in diese Richtung, aber mit Wildcards im Suchmuster. Könnte schwierig werden.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

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

AW: Muster in String

  Alt 29. Nov 2015, 07:52
Wenn ich das richtig sehe, dann sucht er den längsten String, dessen Zeichen in dieser Reihenfolge in beiden Eingabestrings vorkommen.

Oder anders formuliert: Suche den längsten String, so das man diesen String aus beiden Eingabestrings erhalten kann, indem man Zeichen löscht.

Ist das nun richtig oder nicht? Nur der Montag wird die Antwort bringen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Muster in String

  Alt 29. Nov 2015, 09:27
Wenn ich das richtig sehe, dann sucht er den längsten String, dessen Zeichen in dieser Reihenfolge in beiden Eingabestrings vorkommen.
Das könnte so sein. Aber Sir Rufo hat ja auch *1?2?3* als Muster identifiziert, da ist dann die Frage, was ist ein Muster, oder anders herum welche Bedingung muß eine Zeichenkombination erfüllen, damit sie ein Muster ist?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#6

AW: Muster in String

  Alt 29. Nov 2015, 09:40
Hat jemand mal meine Klasse aus probiert? Wenn man die etwas umschreibt, bekommt man tatsächlich die längsten Variationen (nein, keine Substrings, keine Muster, schlicht und ergreifend und mathematisch korrekt: Variationen) zweier Zeichenketten.
Code:
    internal class VariationMatcher
     {
         private readonly string _text1;
         private readonly string _text2;

         private readonly List<string> _patterns=new List<string>();

         public IEnumerable<string> Patterns { get { return _patterns; } }

         public VariationMatcher(string text1, string text2)
         {
             this._text1 = text1;
             this._text2 = text2;
         }

         public void FindLongestVariation()
         {
             for (int subLength = _text.Length; subLength >2; subLength--)
             {
                 ScanPattern(_text1, "", 0, subLength);
                 if (_Patterns.Any())
                   return;
              }
         }

         private void ScanPattern(string text, string pattern, int i, int remaining)
         {
             if (remaining == 0)
             {
                 FindPattern(_text2, pattern,"",0);
             }
             else
                 for (int j = i; j <= text.Length - remaining; j++)
                     ScanPattern(text, pattern + text[j], j + 1, remaining - 1);
         }

         private void FindPattern(string text, string patternToMatch, string pattern, int i)
         {
             if (pattern.Length == patternToMatch.Length)
                 _patterns.Add(pattern);
             else
             {
                 char charToMatch = patternToMatch[pattern.Length];
                 for (int j = i; j <= text.Length - patternToMatch.Length + pattern.Length; j++)
                     if (text[j] == charToMatch)
                         FindPattern(text, patternToMatch, pattern + charToMatch, j + 1);
             }
         }
     }
Nun nur noch 'FindLongestVariation' aufrufen und sich das Ergebnis in 'Patterns' anschauen.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

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

AW: Muster in String

  Alt 29. Nov 2015, 09:41
was ist ein Muster, oder anders herum welche Bedingung muß eine Zeichenkombination erfüllen, damit sie ein Muster ist?
Genau deshalb hab ich ja den Vorschlag gemacht. Das wäre eine konkrete Definition mit der man arbeiten könnte.

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.
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Muster in String

  Alt 29. Nov 2015, 09:42
Im Grunde ist alles ein Muster. Anders ausgedrückt: Es gibt praktisch nichts, das sich nicht als Muster definieren ließe. Es geht doch aber darum, was der TE eigentlich sucht. Man kann nicht nach irgend einem Muster suchen, sondern immer nur nach einem ganz bestimmten Muster, das vor der Suche eindeutig und unmißverständlich zu definieren ist. So lange der TE diese Definition nicht liefert, ist jeder weitere Kommentar dazu reinste Spekulation.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

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

AW: Muster in String

  Alt 29. Nov 2015, 09: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
 
#10

AW: Muster in String

  Alt 29. Nov 2015, 10: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
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 22:56 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