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

标签 regex if-statement solr

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

假设我有一个包含德语变音符号的字符串。例如“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 得到了解决方案:

分三步:

  1. 将变音符号固定在 # 符号之间,使用以下正则表达式:

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

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

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

  3. 重复 #ö##ü#

关于计数出现的正则表达式匹配算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24257989/

相关文章:

regex - Linux grep 命令用多个选项匹配多个模式

regex - 关于 "or"和 "asterisk"的决定

ruby-on-rails - Postgres hstore 和 Rails sunspot solr

solr - Apache Solr 扩展 DisMax 参数的 Spring Data

Java正则表达式获取大括号之间的数据

给初学者的 Python 建议。正则表达式、字典等?

c - 使用 assert 而不是使用简单的 "if"有什么好处?

bash - 忽略 shell 脚本输出中的错误

JavaScript 重定向 URL

security - 使用 Solr 搜索安全/门控内容