我有一串任意字符。我想将它变成一个数组,其中每个字符都在一个数组元素中,除了连续的单词字符(\w+)
,它们应该在一个数组元素中结束。例如:
ab.:u/87z
应该成为
['ab','.',':','u','/','87z']
我的第一种方法是这样的:
mystring.split(/\b/)
当然,这会将非单词字符组合在一起:
['ab','.:','u','/','87','z']
我可以在后续步骤中将它们分开,但我正在寻找一种更优雅的方式。接下来我尝试了这些:
mystring.split(/(\w+|\W)/)
mystring.split(/(\b|\W)/)
两者都返回几乎所需的结果,只是它们也返回包含空字符串的数组元素,所以我必须写类似
的内容mystring.split(/(\b|\W)/).reject(&:empty?)
现在我的问题:有更简单的方法吗?
更新:当我解释我的例子时,我犯了一个愚蠢的错误。当然' 87'和' z'应该在一起,即' 87z'我修好了我的例子。
答案 0 :(得分:3)
不要使用拆分,请使用扫描方法:
> "ab.:u/87z".scan(/\w+|\W/)
=> ["ab", ".", ":", "u", "/", "87z"]
答案 1 :(得分:3)
'ab.:u/87z'.scan(/\w+|./) #=>["ab", ".", ":", "u", "/", "87z"]
我不确定你想要什么,因为你说过单词字符(\w+)
但是分开了87
和z
。如果我没错,\w
应匹配字母,数字和下划线。因此"87z"
。
'ab.:u/87z'.scan(/[A-Za-z]+|\d+|./) #=>["ab", ".", ":", "u", "/", "87", "z"]
你总是可以做到这一点来实现你在那里展示的东西