【发布时间】:2021-11-30 03:46:59
【问题描述】:
我正在尝试为捷克语单词实现非常简单的文本匹配器。由于捷克语的后缀很重,我想定义单词的开头,然后贪婪地匹配单词的其余部分。这是我目前的实现:
r := regexp.MustCompile("(?i)\\by\\w+\\b")
text := "x yž z"
matches := r.FindAllString(text, -1)
fmt.Println(matches) //have [], want [yž]
我研究了 Go 的正则表达式语法: https://github.com/google/re2/wiki/Syntax
但我不知道,如何定义捷克语字符?使用 \w 只匹配 ASCII 字符,而不是捷克 UTF 字符。
你能帮帮我吗?
【问题讨论】:
-
您的意思是您只需要搜索开头带有
y或Y的单词吗?还是您需要更灵活的解决方案? -
是的,在这个例子中是的。在更真实的例子中,我想匹配“uhličitá”、“uhličité”、“uhličitou”、“uhličitého”...
-
@Ondra 比正则表达式更接近全文搜索匹配。 FTS 引擎可以匹配基于词干和语言语法的所有形式。另一方面,前缀搜索会产生次优(有时是有趣)的结果,尤其是在使用复合词时。或前缀。您应该考虑使用 FTS 引擎。 Elastic 提供了多个language analyzers,包括捷克语
-
有时正则表达式不是正确的工具。