【发布时间】:2015-12-26 17:58:10
【问题描述】:
我在 Sphinx 中使用 regexp_filter 来替换术语
在大多数情况下,我可以这样做,例如拼写错误很容易:
regexp_filter = Backround => Background
甚至使用捕获组表示法进行交换:
regexp_filter = (Left)(Right) => \2\1
但是,在使用模式匹配来查找要替换的给定单词时,我遇到了更多麻烦:
regexp_filter = (PatternWord1|PatternWord2)\W+(?:\w+\W+){1,6}?(SearchTerm)\b => NewSearchTerm
NewSearchTerm 将是我只想替换 \2 的术语(仅留下 \1 和模式的其余部分)。所以
所以如果我有文字'Pizza and Taco Parlor' 那么:
regexp_filter = (Pizza)\W+(?:\w+\W+){1,6}?(Parlor)\b => Store
将转换为'Pizza and Taco Store'
我知道在这种情况下 SearchTerm 是 /2 但不确定如何转换。我知道我可以附加例如/2s 使其成为复数,但实际上我该如何替换它,因为它只是一个由多个捕获的组,而我只想替换该组?
【问题讨论】:
-
你想用什么替换它?给我们预期的输入 => 输出。如果这是您的要求,只替换一组是没有问题的。
-
@ndn 抱歉,如果不清楚,请更新答案并在此处发表评论:regexp_filter = (PatternWord1|PatternWord2)\W+(?:\w+\W+){1,6}?(SearchTerm )\b => 新搜索词
标签: regex sphinx capturing-group