(Diese Antwort hat nichts mit regulären Ausdrücken zu tun, aber es deckt einige Anwendungsfälle.)
Ich weiß nicht, ob dies für Ihren Anwendungsfall funktioniert. Aber es sieht so aus, als ob Sie versuchen, herauszufinden, ob ein Wort (oder ein falscher Rechtschreibfehler) in Ihrem Text enthalten ist. Wenn der Text durch Leerzeichen getrennt, und Ihr Wort keine Leerzeichen enthält, könnten Sie versuchen, so etwas wie:
nopunct(s) = filter(c -> !ispunct(c), s)
nfcl(s) = normalize_string(s, decompose=true, compat=true, casefold=true,
stripmark=true, stripignore=true)
canonicalize(s) = nopunct(nfcl(s))
fuzzy(needle, haystack, n) = any(
w -> levenshtein(w, canonicalize(needle)) < n,
split(canonicalize(haystack)))
Was das bedeutet ist, etwa:
nfcl
Saiten mit ähnlichen „menschlichen“ Erscheinungen normalisieren, indem Sie Akzente entfernen, den Fall ignorieren und die Unicode-Normalisierung durchführen. Das ist ziemlich nützlich für die Fuzzy Matching:
julia> nfcl("Ce texte est en français.")
"ce texte est en francais."
nopunct
Streifen Satzzeichen, weiter die Zeichenfolge zu vereinfachen.
julia> nopunct("Hello, World!")
"Hello World"
canonicalize
verbindet einfach diese beiden Transformationen.
Dann überprüfen wir, ob eines der Wörter im Heuhaufen (durch Leerzeichen getrennt) innerhalb n
der Nadel sind.
Beispiele:
julia> fuzzy("Robert", "My name is robrt.", 2)
true
julia> fuzzy("Robert", "My name is john.", 2)
false
Dies ist keineswegs eine vollständige Lösung bedeutet, aber es deckt viele gemeinsame Fällen Gebrauch. Für erweiterte Anwendungsfälle sollten Sie sich genauer mit the subject befassen.
Benötigen Sie Regex hier? Das klingt nach einem harten (rechnerischen) Problem für allgemeine reguläre Ausdrücke. –
Es ist möglich, dass ich es nicht brauche. Ich habe zuerst dieses Problem für exakte Übereinstimmungen mit dem hier aufgelisteten Code gelöst und versuche jetzt, Rechtschreibfehler innerhalb von ** input_string ** zu akzeptieren. – Aaron