def split_string(s, delims)
delim_set = delims.chars.to_set
normalized = s.chars.map { |ch| delim_set.include?(ch) ? " " : ch }.join
normalized.split(" ").reject(&:empty?)
end
require "set"
s = "-c, c++.. c#:: -java! ,php...python: go!"
delims = " ,.:\\-!"
tokens = split_string(s, delims)
tokens.each { |t| puts t }
# run:
#
# c
# c++
# c#
# java
# php
# python
# go
#