J'utilise regexp_filter dans Sphinx pour remplacer les termes
Dans la plupart des cas, je peux le faire, par exemple les fautes d'orthographe sont faciles:
regexp_filter = Backround => Background
Même échange en utilisant la capture de notation de groupe:
regexp_filter = (Left)(Right) => 21
Cependant, j'ai plus de mal à utiliser une correspondance de modèle pour trouver un mot donné que je veux remplacer:
regexp_filter = (PatternWord1|PatternWord2)W+(?:w+W+){1,6}?(SearchTerm)b => NewSearchTerm
Où NewSearchTerm serait le terme, je veux remplacer seulement 2 par (en laissant 1 et le reste du modèle). Donc
Donc, si j'avais du texte "Pizza and Taco Parlor"
puis:
regexp_filter = (Pizza)W+(?:w+W+){1,6}?(Parlor)b => Store
Se convertirait en "Pizza and Taco Store"
Je sais que dans ce cas le SearchTerm est / 2 mais passûr comment convertir. Je sais que je pourrais ajouter par exemple / 2s pour le rendre pluriel, mais comment puis-je le remplacer car il ne s'agit que d'un seul groupe de capture de plusieurs et je veux simplement remplacer ce groupe?
Réponses:
0 pour la réponse № 1Donc, si je comprends la question. Vous disposez d'une chaîne qui correspond aux critères suivants:
- Commencez par PattenWord1 ou PatternWord2
- Immédiatement suivi d'un mot en majuscule
- Peut-être suivi d'un autre mot de 1 à 6 caractères - recommande d'utiliser [A-z] plutôt que w + W +
- Suivi de "SearchTerm"
Utilisons ceci comme référence:
PatternWord1HelloSearchTerm
Et vous souhaitez uniquement remplacer SearchTerm à partir de la chaîne.
Vous avez donc besoin d'un autre groupe de motifs autour de tout ce que vous souhaitez conserver:
regexp_filter = ((PatternWord1|PatternWord2)W+(?:w+W+){1,6}?)(SearchTerm)b => 1World
Vos correspondances de groupe de motifs seraient:
- PatternWord1Hello
- PatternWord1
- Terme de recherche
Votre résultat serait:
PatternWord1HelloWorld