我有一串任意字符。我想把它变成一个数组,其中每个字符都在一个数组元素中,除了连续的单词字符 (\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'。我修正了我的例子。
最佳答案
'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"]
你总是可以这样做来实现你在那里展示的东西
关于ruby - 在 Ruby 中标记字符串的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35202894/