我想在给定的单词中找到搜索词。所以我们说的是Regex 字母的顺序很重要,但我希望允许每个搜索字母的字母之间的字母。
示例:德语单词 seitenschneider 至少包含两种方式 seide :
word: seitenschneider
match 1: xxx.........xx.
match 2: ......x...xxxx.
我想用尽可能少的字母找到结果,所以在这种情况下我会选择匹配2 有没有办法用正则表达式做到这一点?
我尝试不合理地制作通配符,但没有收到预期的结果:
"seitenschneider".scan(/s.*?e.*?i.*?d.*?e/)
=> ["seitenschneide"]
我想要实现的目标是:
"seitenschneider".scan(magic_regex_thingy)
=> ["schneide"]
我也很喜欢像
这样的东西"seitenschneider".scan(another_magic_regex_thingy)
=> ["seitenschneide", "schneide"]
因为我可以在那里找到最短的单词。
有关如何到达那里的任何提示?
答案 0 :(得分:4)
关于你的第二个问题:
"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten
# => ["seitenschneide", "schneide"]
使用上面的正则表达式获得最短的一个:
"seitenschneider".scan(/(?=(s.*?e.*?i.*?d.*?e))/).flatten.min_by(&:length)
# => "schneide"