根据特定条件匹配时分割字符串
我想按第一个元音分割字符串。如果下面的字母也是一个元音,那么在它到达序列中的最后一个元音之前,它不能分割。实例是:根据特定条件匹配时分割字符串
-
"Auxiliary"
=>["Au" "xiliary"]
-
"Doorknob"
=>["Doo" "rknob"]
-
"Green"
=>["Gree" "n"]
我所做的:
"Auxiliary".split("u")
# => ["A", "uxiliary"]
我需要在比赛后分裂,而不是之前。我不确定我是否可以做类似"Auxiliary".split(/[aeiouAEIOU]/)
;这只会在第一次发现元音时分裂。
您可以尝试使用以下模式:
([^aeiou]*[aeiou]+)(.*)
([^aeiou]*[aeiou]+) match and capture zero or more continuous non vowels
followed by one or more vowels
(.*) then capture the remainder of the string
puts "Auxiliary".scan(/([^aeiou]*[aeiou]+)(.*)/i)
puts "Doorknob".scan(/([^aeiou]*[aeiou]+)(.*)/i)
puts "Green".scan(/([^aeiou]*[aeiou]+)(.*)/i)
输出:
Au
xiliary
Doo
rknob
Gree
n
演示在这里:
Rextester
不错,重构建议:'scan(/([^ aeiou] * [aeiou] +)(。*)/ i)' –
@CarySwoveland是的,但我认为这需要Ruby 1.9或更高版本。 –
我使用Ruby版本2.3.0。 哦,谢谢Tim的回答,这个工作很完美。 :)我也很欣赏这个解释! – IainK
R =/
\A # match beginning of string
[^aeiou]* # match zero or more non-vowels
[aeiou]+ # match one or more vowels
/ix # case-indifferent and free-spacing regex definition modes
def split_after_vowels(str)
return nil unless str =~ R
i = Regexp.last_match.end(0)
[str[0,i], str[i..-1]]
end
split_after_vowels 'Aardvark'
#=> ["Aa", "rdvark"]
split_after_vowels 'taught'
#=> ["tau", "ght"]
split_after_vowels 'zzzzzz'
#=> nil
split_after_vowels 'zzzzzz sleep'
#=> ["zzzzzz slee", "p"]
您使用的是哪个版本的Ruby? –
“辅助”.split(/([aeiou] {2})/ i).partition.with_index {| _,i |我 [“Au”,“xillary”]'是一种方式,不是非常整齐,但似乎工作。 –
@ sagarpandya82根据确切的要求(以及所使用的Ruby的版本),查找也可能是有意义的,例如, '(?