简体   繁体   中英

Use ruby to remove a part of a string on each entry in an array where it exists

I have a list of file paths, for example

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

(I mention that they're file paths in case there is something that makes this task easier because they're files but they can be considered simply a set of strings some of which may start with a particular string)

and I need to make this into a set of pairs so that I have the original list but also

[
  'Useful',
  'Interesting',
  'Also/Interesting'
]

I expected I'd be able to do this

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

or

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

but neither of those replaces the provided string/pattern with an empty string...

So in irb

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

outputs

../Some.Root.Directory/Path/Interesting

and the desired output is

Interesting

How can I do this?

NB the path will be passed in so really I have

file_path.gsub!(removal_path, '')

If you are positive that strings start with removal_path you can do:

string[removal_path.size..-1]

to get the remaining part.

If you want to get pairs of the original paths and the shortened ones, you can use sub in combination with 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

This will return an Array of arrays - each sub-array contains the original path plus the shortened one. As noted by @sawa - you can simply use sub instead of gsub , since you want to replace only a single occurrence.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM