我想使用一个 ruby 命令按空格、 ,和 '分割一个字符串。
,
'
word.split将被白色空格分割;
word.split
word.split(",")将被 ,分割;
word.split(",")
word.split("\'")将被 '分割。
word.split("\'")
如何同时做到这三点?
正方糖。
"a,b'c d".split /\s|'|,/ # => ["a", "b", "c", "d"]
word = "Now is the,time for'all good people" word.split(/[\s,']/) => ["Now", "is", "the", "time", "for", "all", "good", "people"]
x = "one,two, three four" new_array = x.gsub(/,|'/, " ").split
还有一个:
word = "Now is the,time for'all good people" word.scan(/\w+/) # => ["Now", "is", "the", "time", "for", "all", "good", "people"]
您可以像下面这样结合使用 split方法和 Regexp.union方法:
split
Regexp.union
delimiters = [',', ' ', "'"] word.split(Regexp.union(delimiters)) # => ["Now", "is", "the", "time", "for", "all", "good", "people"]
您甚至可以在分隔符中使用正则表达式模式。
delimiters = [',', /\s/, "'"] word.split(Regexp.union(delimiters)) # => ["Now", "is", "the", "time", "for", "all", "good", "people"]
这种解决方案的优点是允许完全动态的分隔符或任何长度。
我知道这是一个老线索,但我只是碰巧发现它,并认为我会留下另一个答案。我个人喜欢避免使用 regex,这既是因为我发现它很难阅读,也是因为它几乎总是比使用其他内置方法慢。因此,除了前面提到的正则表达式解决方案,我还考虑使用以下方法:
regex
word.gsub(",", " ").gsub("'", " ").split
第一个 gsub用 space替换所有出现的 ,。第二个 gsub 用 space替换所有出现的 '。这将在所有需要的位置产生 whitespace。然后 split没有参数只是在空格上分裂。
gsub
space
whitespace
它只比前面提到的一些解决方案稍微快一点,但我确实相信它比前面提到的任何其他方案都要快。