/ / Ersetzen eines einzelnen Begriffs in einem Regex-Muster - Regex, Sphinx, Erfassungsgruppe

Ersetzen eines einzelnen Begriffs in einem Regex-Muster - Regex, Sphinx, Capturing-Gruppe

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

Also, wenn ich die Frage verstehe. Sie haben Zeichenfolgen, die den folgenden Kriterien entsprechen:

  1. Beginnen Sie mit PattenWord1 oder PatternWord2
  2. Sofort gefolgt von einem Großbuchstaben
  3. Vielleicht gefolgt von einem anderen Wort mit 1 bis 6 Zeichen - empfehlen Sie die Verwendung von [A-z] anstelle von w + W +
  4. 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:

  1. PatternWord1Hallo
  2. PatternWord1
  3. Suchbegriff

Ihr Ergebnis wäre:

PatternWord1HelloWorld