In Rails gebe ich eine Zeichenfolge: "AE18BX21". Ich frage die Datenbank nach Zeichenfolgen, die mit der Eingabezeichenfolge übereinstimmen. Die Eingabezeichenfolge und die Zeichenfolge in der Datenbank stimmen jedoch manchmal nicht überein. Manchmal gibt es einen zusätzlichen Buchstaben/eine Nummer, manchmal fehlt ein Buchstabe/eine Nummer, oder manchmal ist der Buchstabe/die Nummer ein anderer Buchstabe/eine andere Nummer.Wie Zeichenfolge mit einer anderen Zeichenfolge übereinstimmt, die fast identisch ist (Fuzzy-Matching)
Ich habe ein paar verschiedene Regex Ausdrücke versucht, wie:
Table.where("string =~ ?", 'A+E+1+8+B+X+2+1')
Table.where("string =~ ?", '(A|.)+(E|.)+(1|.)+(8|.)+(B|.)+(X|.)+(2|.)+(1|.)')
In einer idealen Welt würde ich wollen, dass es nur die Saiten zurückzuversetzen 80%
oder mehr zusammenpassen.
Ich glaube, Sie suchen nach etwas, wie Levenshtein-Distanz, aber nicht sicher, welche db-Engine Sie verwenden und ob sie dies unterstützt. In Bezug auf Ihre erste Regex könnten Sie versuchen: 'Table.where (" string = ~? "," A * E * 1 * 8 * B * X * 2 * 1 * ') ' –
Ja, ich hatte nicht darüber nachgedacht die Levenshtein-Entfernung. Ich benutze PostgresSQL. Ich werde einchecken. – cal1801