【发布时间】:2016-09-01 23:17:17
【问题描述】:
这个问题已经在其他编程语言中提出过,但是您将如何在 Ruby 上执行不区分重音的正则表达式?
我当前的代码类似于
scope :by_registered_name, ->(regex){
where(:name => /#{Regexp.escape(regex)}/i)
}
我想也许我可以用点替换非字母数字+空白字符,并删除escape,但是没有更好的方法吗?如果我这样做,恐怕我会抓住奇怪的东西......
我现在的目标是法语,但如果我也可以为其他语言修复它,那会很酷。
如果有帮助的话,我正在使用 Ruby 2.3。
我意识到我的要求实际上有点强,我还需要捕捉破折号之类的东西。我基本上是在导入一个学校数据库(URL here,标签是<nom>),我希望人们成为能够通过键入其名称找到他们的学校。搜索查询和搜索请求都可能包含重音符号,我相信最简单的方法是让“两者”不敏感。
- “Télécom”应与“Telecom”匹配
- “établissement”应与“etablissement”匹配
- “Institut supérieur national de l'artisanat - Chambre de métiers et de l'Artisanat en Moselle”应与“artisanat chambre de métiers”匹配
- “Ecole hôtelière d'Avignon (CCI du Vaucluse)”应与 Ecole hoteliere d'avignon 匹配(括号内可以跳过)
- “Ecole française d'hôtesses”应与“ecole francaise d'hot”匹配
我在那个数据库中发现了一些疯狂的东西,我认为我会考虑清理这个输入
- “Académie internationale de management - Hotel & Tourism Management Academy”应与“Hotel Tourism”匹配(注意 & 实际上写在 XML 中的
&amp;)
【问题讨论】:
-
您能否编辑您的问题以包括几个您想要处理的输入类型的示例以及相应的结果应该是什么?
-
在某些语言中,“a”和“å”之间存在巨大差异。法语基本上无动于衷。您有排序偏好吗?
-
哎呀,我之前并没有真正看过数据库(真遗憾……在我上完所有的数据科学课程之后 ;'( ),但事实证明我还有更多特殊字符要处理,请参阅我的编辑。
-
@CyrilDuchon-Doris 我删除了它,因为我认为它不能回答问题。它解释了如何从正则表达式中删除变音符号,但生成的正则表达式不会匹配带有变音符号的字符串,这是我认为 OP 正在尝试做的。
标签: ruby regex mongodb ruby-on-rails-5