(a) 我写的代码。
$str = '909090 aa bb cc dd ee ff 00 12345678 aa bb 12345678 aa bb cc dd ee ff 00 11 22 33 123456 FE 89'
puts $str
$str.gsub!(/\s+/, '')
search_1 = 'aa bb cc dd ee ff 00 (\S{8} aa bb \S{8} aa bb cc dd ee ff 00 11 22 33 \S{6}) (FF|FE) (89)'
puts search_1
search_1.gsub!(/\s+/, '')
replace_1 = '11 22 33 44 55 66 77 $1 $2 $3'
puts replace_1
replace_1.gsub!(/\s+/, '')
repls_1 = [
[search_1, replace_1],
]
repls_1.each do |x|
abc = $str.gsub(Regexp.new(x[0])) {
x[1]
}
puts abc
end
(2)脚本运行结果
909090 aa bb cc dd ee ff 00 12345678 aa bb 12345678 aa bb cc dd ee ff 00 11 22 33 123456 FE 89
aa bb cc dd ee ff 00 (\S{8} aa bb \S{8} aa bb cc dd ee ff 00 11 22 33 \S{6}) (FF|FE) (89)
11 22 33 44 55 66 77 $1 $2 $3
90909011223344556677$1$2$3
$1、$2、$3 的插值没有发生,有办法解决吗?谢谢。
(i) 我不想使用,但是 $1 $2 $3)
(ii) 模式不止一种,这里仅举一个例子
(iii) 匹配的零件编号不固定,这里是$1$2$3,其他情况也是可能的,例如...$1...$2...$3...$5...,希望代码可以涵盖这一点捕获的零件数量和位置都有变化。
在 Ruby 中,gsub 方法不支持 $1、$2、$3 等在替换字符串中进行插值。但是,您可以在给定 gsub 的块中使用它们,如下所示。尝试修改此代码。
repls_1.each do |x|
abc = $str.gsub(Regexp.new(x[0])) {
'11223344556677' + $1 + $2 + $3
}
puts abc
end