【发布时间】:2014-08-11 15:38:34
【问题描述】:
我 99% 确定以前没有人问过这个问题,所以就这样吧。
假设我们有一个字符串数组
strings = ['first string', 'second string', 'third string']
我想创建一个新的大型数组,在其中将三个元素中的每个元素中的 空白字符 替换为每个非空白字符(字母、数字、符号)。
它看起来像这样。
new_array = ['firstastring', 'secondastring', 'thirdastring', 'firstbstring', ..
'first1string', 'seond1string', .. 'third^string', ...]
新数组的计数应该是原数组中的元素个数(3)乘以Ruby中非空白字符的个数
一个可能的解决方案是这样的
new_array = []
/[\S]/.each do |character|
strings.each do |string|
new_array.gsub(string, character)
end
end
我理解在正则表达式中 \S 表达式指的是任何非空白字符,所以我认为这是最好的使用方法。
我仍然是 Ruby 的初学者,所以我很感激任何帮助。
根据我对 Ruby 的理解,该解决方案很可能涉及每个循环。
更新 抱歉各位,您好像不能在 regex 类上调用 each 方法。我有另一个想法。
characters_array = (0..9).to_a.map(&:to_s) + ('a'..'z').to_a + ('A'..'Z').to_a +
["!", "@", "#", "$", "%", "^", "&", "*", "(", ")", "-", "_", "+", "=", "`", "~",
":", ";", ",", ".", "?", "/"]
new_array = []
characters_array.each do |character|
strings.each do |string|
new_array.gsub(string, character)
end
end
这只是一个想法。
【问题讨论】:
-
我认为你误解了正则表达式。您不能在
/[\S]/上致电each。正则表达式用于在文本中搜索和替换,而不是用于描述数据集。通过遍历数组和非空白字符数组,可以很容易地实现您想要做的事情。但是,我不知道在哪里可以获得包含所有非空白字符的数组。对于所有字母,您都可以使用('a'..'z').to_a,但我猜这还不够。 -
谢谢,我会更新帖子,我有另一个想法
-
您希望使用的非空白字符集是什么?是否要包含所有 Unicode 字符?您的第一步是仔细定义该字符集是什么。然后用那组字符来代替。
-
我认为所有非空白字符都只是数字、字母和符号。我刚才用这些字符创建了一个数组。
-
@DarkMouse,我很好奇你的用例。最肯定的是,有一个替代解决方案不需要您创建一个 99+% 冗余的阵列。愿意提供一些背景信息吗?
标签: ruby arrays regex string gsub