我试图在字符串中找到元音的第一个匹配项,然后在ruby中对字符串进行分区,但是我没有得到正确的结果。
我尝试过的是
UseStaticFiles()
但是我回来了"rodio".partition(/[(?=aeiouAEIOU)].*/).reject(&:empty?)
。对于我抛出的任何单词,我都会找回没有元音的部分和带有的部分,但是我需要没有元音的部分来包含它。所以应该是
["r", "odio"]
。
["ro", "dio"]
应该是celery
而不是["ce", "lery"]
等。
我想念什么?我正在尝试一切,但我不知道如何编写。
答案 0 :(得分:4)
您可以使用正向后视和带有split
极限参数的2
:
.split(/(?<=[aeiou])/i, 2)
(?<=[aeiou])
模式是正向后看,它与紧接在a
,e
,i
,{{ 1}}或o
(使用u
修饰符启用不区分大小写的匹配)。 /i
limit 参数使引擎仅将字符串分成两部分,因此在第一场比赛中只会被分割一次。
您肯定可以对2
使用相同的模式:
.partition
答案 1 :(得分:4)
您无需使用任何环顾四周即可,非贪婪的量词就足够了:
"rodio".partition(/.*?[aeiou]/i).reject(&:empty?)
或者更好,使用否定的字符类:
"rodio".partition(/[^aeiou]*./i).reject(&:empty?)
答案 2 :(得分:1)
只需使用正向后看即可:"rodio".partition(/(?<=[aeiou])/i).reject(&:empty?)
答案 3 :(得分:1)
一个人可以使用String#index找到第一个元音的位置,然后找到String#[](“切片”)。
str = "their"
i = str.index /[aeiou]/i
#=> 2
i.nil? ? str : [str[0..i], str[i+1..-1]]
#=> ["the", "ir"]
str = "tryst"
i = str.index /[aeiou]/i
#=> nil
i.nil? ? str : [str[0..i], str[i+1..-1]]
#=> "tryst"