按多个分隔符拆分字符串

我想使用一个 ruby 命令按空格、 ,'分割一个字符串。

  1. word.split将被白色空格分割;

  2. word.split(",")将被 ,分割;

  3. word.split("\'")将被 '分割。

如何同时做到这三点?

62783 次浏览

正方糖。

"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方法:

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,这既是因为我发现它很难阅读,也是因为它几乎总是比使用其他内置方法慢。因此,除了前面提到的正则表达式解决方案,我还考虑使用以下方法:

word.gsub(",", " ").gsub("'", " ").split

第一个 gsubspace替换所有出现的 ,。第二个 gsub 用 space替换所有出现的 '。这将在所有需要的位置产生 whitespace。然后 split没有参数只是在空格上分裂。

它只比前面提到的一些解决方案稍微快一点,但我确实相信它比前面提到的任何其他方案都要快。