Announcement

Collapse
No announcement yet.

String Regex

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • String Regex

    Hallo!

    Da ich eine Datenbank für ein Spiel erstellt habe, möchte ich, dass die Lösungen in die Datenbank eingetragen werden.

    Nur mein Problem ist:

    Wie kriege ich die Lösungen?

    Am Anfang kommt:

    "Löse folgenden Mix: Hallo (0) lieber (1) User (2)"

    Und wenn der Mix gelöst wurde, kommt: "Tatsächlich ist 'Hallo lieber User' richtig, NICK."

    Jetzt will ich, dass er die Lösung regexxt.

    Das Eintragen in die Datenbank ist kein Problem, nur das mit dem Regex.

    Ich kann leider überhaupt kein Regex.

    MfG

  • #2
    Jetzt will ich, dass er die Lösung regexxt.
    Was könnte damit gemeint sein?

    Zum testen und entwickeln von regulären Ausdrücken

    http://www.fileformat.info/tool/regex.htm
    Christian

    Comment


    • #3
      Ich weiß nicht genau, wie ich das Ausdrücken soll.

      Man soll halt drauf kommen, dass die Lösung 012 ist (s.o)

      MfG

      Comment


      • #4
        .*\((\d)\).*\((\d)\).*\((\d)\)

        Die Ziffern sind in den ersten 3 Gruppen (1-3)
        Zuletzt editiert von Christian Marquardt; 10.12.2009, 20:12.
        Christian

        Comment


        • #5
          Ich habe jetzt rumexperimentiert, bin aber nicht auf die Lösung gekommen.

          Kann mir jemand helfen und alles erklären?

          MfG

          Comment


          • #6
            Kann mir jemand helfen ...
            Vielleicht wenn du dein Problem einmal richtig(und vollständig) erklärst. So versteht man(zumindest ich) nur Bahnhof.

            Comment


            • #7
              Okay, ich fange mal von ganz vorne an:

              Also es gibt ein Spiel, wo Wörter gemixt wurden mit Zahlen dahinter.

              Beispielsweise: Wir (0) gut. (1) sind (2)

              Die Lösung wäre 021 (Wir sind gut.)

              Ich habe ein PHP Script, das diesen Satz aufnimmt und in Google danach sucht (nicht von mir).

              Wenn dieses Script nichts findet, möchte ich, dass der Satz in meine Datenbank kommt (sie ist schon fertig).

              Das heißt:

              Wenn der Satz "Wir (0) gut. (1) sind (2)" da ist und das Googler Script findet nichts, soll dieser Satz in die Datenbank.

              Den Satz habe ich rausgefiltert (den gemixten mit den Zahlen), das geht.

              Wenn jemand den Satz gelöst hat, kommt:

              "Tatsächlich ist 'Wir sind gut.' richtig, NICK." ~> Davon habe ich 'Wir sind gut' auch rausgefiltert.

              Jetzt will ich, dass er durch irgendeinen Algorithmus oder so die Reihenfolge (d.h. die Lösung) herausfindet, damit ich sie in die Datenbank eintragen kann, verstanden?

              Hoffentlich versteht ihr es.

              MfG
              Zuletzt editiert von String08; 11.12.2009, 00:32.

              Comment


              • #8
                Jetzt will ich, dass er durch irgendeinen Algorithmus oder so die Reihenfolge (d.h. die Lösung) herausfindet, damit ich sie in die Datenbank eintragen kann, verstanden?

                Das nennt man programmieren. Dafür gibt es keinen "ein Zeilen" Algorithmus.

                Mit dem o.a. regulären Ausdruck kannst du die Zahlen aus dem String extrahieren. Das nützt dir aber wenig.

                Du musst die relevanten Wörter des Lösungssatzes "Wir" "sind" "gut" einzeln mit dem Ausgangssatz vergleichen

                Dazu sind die Wörter des Ausgangssatzes aufzusplitten und in ein Array oder Liste aufzunehmen
                Dann sind die relevanten Wörter des Lösungssatzes aufzusplitten.
                Dann sind die aufgesplitteten Wörter des Lösungssatzes in ihrer Reihenfolge mit den aufgesplitteten Wörtern des Ausgangssatzes zu vergleichen. Die gefundenenen Positionen ergeben dann die Reihenfolge der Ziffern.

                Mit einem regulären Ausdruck hat das wenig zu tun. Der kann ggf. die Klammern mit den Ziffern aus dem Ausgangssatz löschen.
                Christian

                Comment


                • #9
                  Falls ich die Problemstellung richtig verstanden habe, wird nach einem Algorithmus gesucht, der folgende Bedingung erfüllt:

                  [highlight=vbnet]If Compute("Wir (0) gut. (1) sind (2)", "021") = "Wir sind gut." Then
                  MsgBox("Richtig, Nick!")
                  End If[/highlight]

                  Wenn möglich, soll Compute() von regulären Ausdrücken Gebrauch machen.
                  Nur unter diesen Prämissen lohnt sich ein Blick auf die nachfolgende Compute()-Routine.

                  [highlight=vbnet] ''' <summary>
                  ''' Berechnet aus einem Satzteil-Index-String gemäß der sequence einen Satz
                  ''' </summary>
                  ''' <param name="input"></param>
                  ''' <param name="sequence"></param>
                  ''' <returns></returns>
                  ''' <remarks>
                  ''' Beispiel funktioniert nur für Indices von 0-9
                  ''' </remarks>
                  Private Function Compute(ByVal input As String, ByVal sequence As String) As String
                  'Satzteil, möglichst kurz, mit nachfolgendem Index in ()
                  Dim regExInput As New System.Text.RegularExpressions.Regex("\s*(?<part>. +?)\((?<id>\d)\)\s*", System.Text.RegularExpressions.RegexOptions.Explic itCapture Or System.Text.RegularExpressions.RegexOptions.Single line)
                  'eine Ziffer
                  Dim regExSequence As New System.Text.RegularExpressions.Regex("\d", System.Text.RegularExpressions.RegexOptions.Single line)
                  Dim map As New System.Collections.Generic.Dictionary(Of String, String)
                  Dim sb As New System.Text.StringBuilder

                  'Satzteil-Index-Kombinationen ermitteln
                  For Each match As System.Text.RegularExpressions.Match In regExInput.Matches(input)
                  Dim id As String = match.Groups("id").Value
                  If Not map.ContainsKey(id) Then
                  map.Add(id, match.Groups("part").Value.Trim)
                  End If
                  Next
                  'Sequenz ermitteln
                  For Each match As System.Text.RegularExpressions.Match In regExSequence.Matches(sequence)
                  If map.ContainsKey(match.Value) Then
                  'und Satzteil zum Satz hinzufügen
                  sb.Append(map(match.Value) & " ")
                  End If
                  Next
                  'letztes Leerzeichen entfernen
                  If sb.Length > 0 Then sb.Length -= 1

                  Return sb.ToString
                  End Function[/highlight]

                  Comment


                  • #10
                    Es soll als Ergebnis die richtige Reihenfolge der Zahlenkombination vorliegen, hier

                    021
                    Christian

                    Comment


                    • #11
                      Also mit in Arrays splitten und einfach die Index Werte des Arrays benutzen hat Christian eigentlich schon genug Lösungsansatz gegeben. Ein bischen muss man das Köpfchen auch selbst anstrengen

                      Comment

                      Working...
                      X