Ich verwende regexp_filter in Sphinx, um Begriffe zu ersetzen
In den meisten Fällen kann ich dies tun, z. Rechtschreibfehler sind einfach:
regexp_filter = Backround => Background
Sogar das Austauschen mit der Capture-Gruppennotation:
regexp_filter = (Left)(Right) => 21
Ich habe jedoch mehr Probleme, wenn ich eine Musterübereinstimmung verwende, um bestimmte Wörter zu finden, die ich ersetzen möchte:
regexp_filter = (PatternWord1|PatternWord2)W+(?:w+W+){1,6}?(SearchTerm)b => NewSearchTerm
Wo NewSearchTerm der Begriff wäre, möchte ich nur 2 durch ersetzen (wobei 1 und der Rest des Musters allein bleiben). Damit
Also wenn ich Text hätte "Pizza and Taco Parlor"
dann:
regexp_filter = (Pizza)W+(?:w+W+){1,6}?(Parlor)b => Store
Würde konvertieren zu "Pizza and Taco Store"
Ich weiß in diesem Fall, dass SearchTerm / 2 ist, aber nichtsicher, wie man konvertiert. Ich weiß, dass ich z. / 2s, um es plural zu machen, aber wie kann ich es tatsächlich ersetzen, da es nur eine einzelne Erfassungsgruppe von mehreren ist und ich nur diese Gruppe ersetzen möchte?
Antworten:
0 für die Antwort № 1Also, wenn ich die Frage verstehe. Sie haben Zeichenfolgen, die den folgenden Kriterien entsprechen:
- Beginnen Sie mit PattenWord1 oder PatternWord2
- Sofort gefolgt von einem Großbuchstaben
- Vielleicht gefolgt von einem anderen Wort mit 1 bis 6 Zeichen - empfehlen Sie die Verwendung von [A-z] anstelle von w + W +
- Gefolgt von "SearchTerm"
Verwenden Sie dies als Basis:
PatternWord1HelloSearchTerm
Und Sie möchten SearchTerm nur durch die Zeichenfolge ersetzen.
Sie benötigen also eine weitere Mustergruppe für alles, was Sie behalten möchten:
regexp_filter = ((PatternWord1|PatternWord2)W+(?:w+W+){1,6}?)(SearchTerm)b => 1World
Ihre Mustergruppenübereinstimmungen wären:
- PatternWord1Hallo
- PatternWord1
- Suchbegriff
Ihr Ergebnis wäre:
PatternWord1HelloWorld