使用ruby删除数组中存在的每个条目上的字符串的一部分

使用ruby删除数组中存在的每个条目上的字符串的一部分,ruby,Ruby,例如,我有一个文件路径列表 [ 'Useful', '../Some.Root.Directory/Path/Interesting', '../Some.Root.Directory/Path/Also/Interesting' ] (我提到它们是文件路径,以防有什么东西使这项任务更容易,因为它们是文件,但它们可以被视为一组字符串,其中一些可能以特定字符串开头) 我需要把它分成一组对,这样我就有了原始的列表,而且 [ 'Useful', 'Interesting',

例如,我有一个文件路径列表

[
  'Useful',
  '../Some.Root.Directory/Path/Interesting',
  '../Some.Root.Directory/Path/Also/Interesting'
]
(我提到它们是文件路径,以防有什么东西使这项任务更容易,因为它们是文件,但它们可以被视为一组字符串,其中一些可能以特定字符串开头)

我需要把它分成一组对,这样我就有了原始的列表,而且

[
  'Useful',
  'Interesting',
  'Also/Interesting'
]
我希望我能做到这一点

'../Some.Root.Directory/Path/Interesting'.gsub!('../Some.Root.Directory/Path/', '')

但这两种方法都不能用空字符串替换提供的字符串/模式

所以在irb中

puts '../Some.Root.Directory/Path/Interesting'.gsub('\.\.\/Some\.Root\.Directory\/Path\/', '')
输出

../Some.Root.Directory/Path/Interesting
并且期望的输出是

Interesting
我该怎么做

注意,这条路会被通过,所以我真的

file_path.gsub!(removal_path, '')

如果要获得原始路径和缩短路径对,可以将
sub
map
结合使用:

a = [
   '../Some.Root.Directory/Path/Interesting',
   '../Some.Root.Directory/Path/Also/Interesting'
]

b = a.map do |v| 
  [v, v.sub('../Some.Root.Directory/Path', '')] 
end

puts b

这将返回一个数组数组-每个子数组包含原始路径加上缩短的路径。正如@sawa所指出的,您可以简单地使用
sub
而不是
gsub
,因为您只想替换一个匹配项。

如果您想获得原始路径对和缩短路径对,您可以将
sub
map
结合使用:

a = [
   '../Some.Root.Directory/Path/Interesting',
   '../Some.Root.Directory/Path/Also/Interesting'
]

b = a.map do |v| 
  [v, v.sub('../Some.Root.Directory/Path', '')] 
end

puts b

这将返回一个数组数组-每个子数组包含原始路径加上缩短的路径。正如@sawa所指出的,您可以简单地使用
sub
而不是
gsub
,因为您只想替换一个匹配项。

如果您确定字符串以
删除路径开始,您可以执行以下操作:

string[removal_path.size..-1]

获取剩余部分。

如果确定字符串以
删除路径开始,则可以执行以下操作:

string[removal_path.size..-1]


获取剩余部分。

它怎么不起作用?哦,对不起,我想这是不言自明的。我将具体说明:)为什么要使用
gsub而不是
sub?我不明白你在用它做什么。我不太懂ruby,所以我可能没有使用正确的方法。如果你想保留原始数组,为什么要使用
gsub而不是
gsub
(或者
sub
,这更有意义)?它怎么不起作用?哦,对不起,我想这是不言自明的。我将具体说明:)为什么要使用
gsub而不是
sub?我不明白你在用它做什么。我不太懂ruby,所以我可能没有使用正确的方法。如果你想保留原始数组,为什么要使用
gsub
而不是
gsub
(或者
sub
,这更有意义)?为什么要使用
gsub
?这没道理。@sawa你说得对,这里不需要gsub。替换为sub。为了安全起见,在路径之前使用带有
\a
的正则表达式可能更好。我肯定我昨天这么做了,但很明显我的大脑很累,因为它肯定能工作。为什么要使用
gsub
?这没道理。@sawa你说得对,这里不需要gsub。替换为sub。为了安全起见,在路径之前使用带有
\a
的正则表达式可能更好。我肯定我昨天这样做了,但很明显我的大脑很累,因为它确实有效。对不起,我的示例有误导性。并非所有字符串都以该路径开头(尽管我可以将其添加到不存在该路径的位置:)。抱歉,我的示例有误导性。并非所有字符串都以该路径开头(尽管我可以将其添加到不存在该路径的位置:)