/ / Remplacement d'un seul terme dans un modèle d'expression régulière - expression régulière, sphinx, groupe de capture

Remplacer un seul terme dans un motif regex - regex, sphinx, capturing-group

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 № 1

Donc, si je comprends la question. Vous disposez d'une chaîne qui correspond aux critères suivants:

  1. Commencez par PattenWord1 ou PatternWord2
  2. Immédiatement suivi d'un mot en majuscule
  3. Peut-être suivi d'un autre mot de 1 à 6 caractères - recommande d'utiliser [A-z] plutôt que w + W +
  4. 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:

  1. PatternWord1Hello
  2. PatternWord1
  3. Terme de recherche

Votre résultat serait:

PatternWord1HelloWorld