计数出现时的正则表达式匹配算法

时间:2014-06-17 07:25:39

标签: regex if-statement solr

我花了我的时间来解决我的小正则表达式问题。

假设我有一个包含德语变音符号的字符串。例如“Brötchenkörbe”。

我需要最好的正则表达式条件才能匹配除最后一个之外的所有'ö',如果'ö'的出现是> 1

(else)如果字符串中只有一个'ö',我也希望匹配该字符。

这样我就会得到以下结果:

溴的ötchenkörbe

中号的ö hrenl的ösungslöcher

ö schwagen

我找到了一个与每个'ö'匹配的表达式,除了最后一个'ö'。但如果'ö'只出现一次,那就不配了:

/(ö(?=[^.]*[ö]))/

有没有人得到这个伎俩?

我需要该表达式来处理我的solr服务器上的过滤器。

背景:我使用词干过滤器来阻止德语单词。但是使用过的过滤器“SnowballPorterFilter”确实将每个变音符号(öäüÖÄÜ)更改为(oauOAU)。

只需要从该过滤器更改最后一个变音符号,这样我就可以使用regex-filter(“PatternReplaceFilterFactory”)来保护所有其他变音符号免受该变化的影响,并在运行该stemm-filter后撤消该保护。

例如:Möhrenlösungslöcher获得“M#o#hrenl#o#sungslöcher”,过滤器执行“M#o #hrenl#o#sungsloch”,然后反向保护“Möhrenlösungsloch”

1 个答案:

答案 0 :(得分:1)

Qeole得到了解决方案:

分三步:

  1. 放置变音符号以修复#符号以及正则表达式:

    /(^([^äöü]*))(ä|ö|ü)|(ä|ö|ü)(?![^äöü]*$)/gm
    

    (替换为$1#$3$4#
    所有要修复的变音符号现在都在#个符号之间。所以,让我们继续......

  2. 将所有#ä#更改为#a#

  3. 重复#ö##ü#