我花了我们的钱来解决我的小正则表达式问题。
假设我有一个包含德语变音符号的字符串。例如“Brötchenkörbe”。
如果 'ö' 的出现次数 > 1,我需要最好的正则表达式条件来匹配除最后一个之外的所有 'ö'
(else) 如果字符串中只有一个 'ö',我也想匹配那个字符。
这样我会得到以下结果:
Brötchenkörbe
Möhrenlösungslöcher
Lö施瓦根
我找到了一个匹配每个 'ö' 的表达式,除了最后一个。但如果 'ö' 只出现一次,则不匹配:
/(ö(?=[^.]*[ö]))/
有人知道吗?
我需要该表达式在我的 solr 服务器上的过滤器上工作。
背景:我使用词干过滤器来提取德语单词的词干。但使用的过滤器“SnowballPorterFilter”确实将每个元音变音 (öäüÖÄÜ) 更改为 (oauOAU)。
只有最后一个变音符号需要从该过滤器中更改,因此我想使用正则表达式过滤器(“PatternReplaceFilterFactory”)来保护所有其他变音符号免受该更改的影响,并在运行该词干过滤器后撤销该保护。
例如:Möhrenlösungslöcher 获取“M#o#hrenl#o#sungslöcher”,过滤器执行“M#o#hrenl#o#sungsloch”,然后反向保护到“Möhrenlösungsloch”
最佳答案
Qeole 得到了解决方案:
分三步:
将变音符号固定在
#
符号之间,使用以下正则表达式:/(^([^äöü]*))(ä|ö|ü)|(ä|ö|ü)(?![^äöü]*$)/gm
(替换为
$1#$3$4#
)
所有要修复的变音符号现在都在#
符号之间。所以让我们继续前进……将所有
#ä#
改为#a#
。重复
#ö#
和#ü#
。
关于计数出现的正则表达式匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257989/