从数组中获取 gsub 中的占位符以打印
Get placeholder within gsub from array to print
这是我的代码:
str = "\c 2 foo \v 1 bar \v 2 foo \v 3 bar " +
"\v 4 foo \c 3 bar \v 1 foo \v 2 bar"
str.gsub!(/(\c \d+)/, 'CHAPTER SPLIT ')
#=> CHAPTER SPLIT \c 2 foo \v 1 bar \v 2 foo \v 3 bar \v 4 foo CHAPTER SPLIT \c 3 bar \v 1 foo \v 2 bar
str.split('CHAPTER SPLIT').map do |s|
s.scan(/\c (\d+)/).each {|c| puts s.gsub!(/\v (\d+)/, c.to_s + ':')}
end
#=> \c 2 foo ["2"]:1 bar ["2"]:2 foo ["2"]:3 bar ["2"]:4 foo
# \c 3 bar ["3"]:1 foo ["3"]:2 bar
我要找的最终结果是
\c 2 foo 2:1 bar 2:2 foo 2:3 bar 2:4 foo
\c 3 bar 3:1 foo 3:2 bar
一定有比我所做的更简单的方法来做到这一点,我不确定如何从我现在得到的结果中得到它需要的结果。
这里有一个没有 reexp 的解决方案:
str = "\c 2 foo \v 1 bar \v 2 foo \v 3 bar " +
"\v 4 foo \c 3 bar \v 1 foo \v 2 bar"
x = str.split.slice_before('\c').map do |c_token,chapter,*rest|
[c_token,chapter]+rest.map.with_index do |x,ix|
if rest[ix-1] == '\v'
chapter+':'+x
else
x
end
end
end
p x.flatten.join(' ')
这是我的代码:
str = "\c 2 foo \v 1 bar \v 2 foo \v 3 bar " +
"\v 4 foo \c 3 bar \v 1 foo \v 2 bar"
str.gsub!(/(\c \d+)/, 'CHAPTER SPLIT ')
#=> CHAPTER SPLIT \c 2 foo \v 1 bar \v 2 foo \v 3 bar \v 4 foo CHAPTER SPLIT \c 3 bar \v 1 foo \v 2 bar
str.split('CHAPTER SPLIT').map do |s|
s.scan(/\c (\d+)/).each {|c| puts s.gsub!(/\v (\d+)/, c.to_s + ':')}
end
#=> \c 2 foo ["2"]:1 bar ["2"]:2 foo ["2"]:3 bar ["2"]:4 foo
# \c 3 bar ["3"]:1 foo ["3"]:2 bar
我要找的最终结果是
\c 2 foo 2:1 bar 2:2 foo 2:3 bar 2:4 foo
\c 3 bar 3:1 foo 3:2 bar
一定有比我所做的更简单的方法来做到这一点,我不确定如何从我现在得到的结果中得到它需要的结果。
这里有一个没有 reexp 的解决方案:
str = "\c 2 foo \v 1 bar \v 2 foo \v 3 bar " +
"\v 4 foo \c 3 bar \v 1 foo \v 2 bar"
x = str.split.slice_before('\c').map do |c_token,chapter,*rest|
[c_token,chapter]+rest.map.with_index do |x,ix|
if rest[ix-1] == '\v'
chapter+':'+x
else
x
end
end
end
p x.flatten.join(' ')