Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Strings vergleichen-String Variabel, z.B.: "Auto(s)" (https://www.delphipraxis.net/139383-strings-vergleichen-string-variabel-z-b-auto-s.html)

Fussball-Robby 27. Aug 2009 19:27


Strings vergleichen-String Variabel, z.B.: "Auto(s)&quo
 
Hey,
ich möchte 2 Strings vergleichen, wobei einer der Strings auf eine bestimmte Weise variabel ist.
So kann dieser String "Auto(s)" enthalten. Wird dies nun mit "Auto" oder "Autos" verglichen, soll beides True ergeben.
Mehrere Klammern sind möglich, "(an)mutig(er)" würde zum Beispiel stehen für : "mutig", "anmutig", "mutiger" und "anmutiger". Das soll nach diesem System beliebig erweiterbar sein.
Habt ihr da einen Ansatz? Wäre es mit regulären Ausdrücken lösbar?(Habe die noch nie benutzt)

Danke schonmal!

mkinzler 27. Aug 2009 19:33

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Sollte mit regulären Ausdrücken machbar sein

Meflin 27. Aug 2009 19:34

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Was du vorhast klingt eher nach Stemming. Kommt drauf an wie umfangreich das werden soll - theoretisch gings auch mit Regexen bis zu einem gewissen grad, aber naja, eigentlich müsstest du dich schon eher in ersteres Thema einarbeiten ;)

Apollonius 27. Aug 2009 19:34

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Nichtdeterministischer endlicher Automat. :mrgreen:
Spaß beiseite: Woher bekommst du deine Muster? Regular Expressions sind für die Aufgabenstellung ideal, aber wenn die Maske vom Benutzer kommt, musst du ein bisschen umformen.

Fussball-Robby 27. Aug 2009 19:41

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Die eingabe kommt vom Benutzer. Die Klammern können an beliebiger Stelle in einem beliebigen String eingebaut werden. Im Normalfall sind es allerhöchstens 3 Klammern.
Ich müsste dann also zum Beispiel prüfen, ob "Autos" in "Auto(s)" enthalten ist.

Apollonius 27. Aug 2009 19:55

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Es sollte relativ einfach sein, das Muster in einen regulären Ausdruck umzuwandeln. Wie? Mit einem regulären Ausdruck. :mrgreen: Ich bin da allerdings nicht so bewandert. Welche RegExp-Engine würdest du denn verwenden?

Klaus01 28. Aug 2009 08:11

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
.. es ist noch relativ früh am Morgen..

Ist es nicht auch möglich, dass alle '(' und ')' aus dem String entfernt werden
und dann mit pos nachgeschaut wird ob der gesuchte String enthalten ist.

Beispiel:
Aus (an)mutig(er)" wird anmutiger
Gefunden würde:
"mutig", "anmutig", "mutiger" und "anmutiger".

Grüße
Klaus

himitsu 28. Aug 2009 08:18

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Zitat:

Zitat von Klaus01
Ist es nicht auch möglich, dass alle '(' und ')' aus dem String entfernt werden
und dann mit pos nachgeschaut wird ob der gesuchte String enthalten ist.

gefunden würde auch "xyzmutig"

Delphi-Quellcode:
S := '^' + StringReplace(S, ')', ')*', [rfReplaceAll]) + '$';
würde aus "(an)mutig(er)" ein "^(an)*mutig(er)*$" machen, welches doch schonmal nicht so schlecht aussieht und mich auch irgendwie an so'ne Vergleichsmaske erinnert?

Blup 28. Aug 2009 10:29

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Alle möglichen Permutationen in eine Liste vorberechnen.
Nach dem Wortstamm suchen und jede Fundstelle mit den Permutationen vergleichen.
Gibt es keinen eigentlichen Wortstamm, wird es etwas komplizierter.

Fussball-Robby 14. Sep 2009 15:12

Re: Strings vergleichen-String Variabel, z.B.: "Auto(s)
 
Hey,
ich greife diesen Thread nochmal auf, da es immer noch um die selbe Sache geht. Ich versuche nun, das ganze in Eigenarbeit, sprich ohne Reguläre Ausdrücke, zu lösen und hoffe, dass ihr mir dabei helfen könnt.
Ich habe den eingegebenen String nun auseinander genommen und die einzelnen "Bausteine" des Wortes sortiert, die aus den Klammern in eine StringList und die Teile zwischen den Klammern in eine andere. So möchte ich jetzt alle Möglichkeiten berechnen. Ich stehe aber total auf dem Schlauch und mir fehlt ein Ansatz :oops: Die Einträge der einen Liste müssen in jedem Wort vorkommen, das ist relativ einfach. Doch die aus der anderen Liste müssen mal vorkommen und mal nicht - in allen möglichen Kombinationen. Wie bekomme ich das möglichst elegant hin?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.
Seite 1 von 2  1 2      

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