我花了我的时间来解决我的小正则表达式问题。
假设我有一个包含德语变音符号的字符串。例如“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”答案 0 :(得分:1)
Qeole得到了解决方案:
分三步:
放置变音符号以修复#
符号以及正则表达式:
/(^([^äöü]*))(ä|ö|ü)|(ä|ö|ü)(?![^äöü]*$)/gm
(替换为$1#$3$4#
)
所有要修复的变音符号现在都在#
个符号之间。所以,让我们继续......
将所有#ä#
更改为#a#
。
重复#ö#
和#ü#
。