Ruby嵌套的gsubs?

时间:2018-03-09 03:47:24

标签: ruby gsub

我正在解析一个txt文件(一本古老的赞美诗书)。我想做以下事情:

  • 获得合唱
  • 解析/补充该合唱的每一行

我已尝试过此代码:

chorus_regex = /([^0-9]+\n)+/
puts hymn.gsub(chorus_regex) {|match| match.gsub(/^([^0-9]+\n)/, "  \1")}

但第二个gsub只影响第一行?我认为这是因为\1可能适用于第一个正则表达式,而不是第二个正则表达式

TL; DR

你如何编写嵌套的gsubs,这样你就可以抓取txt的块,在这些块上做一个gsub,然后用结果替换旧块?

修改

我简化了正则表达式,所以问题集中在如何嵌套正则表达式gsubs,而不是分散复杂的正则表达式或编码错误的字符。

1 个答案:

答案 0 :(得分:0)

要嵌套gsubs,请确保为gsubs使用块,并且可以使用perlisms(第一组$ 1等)。

chorus_regex = /([^0-9]+\n)+/
puts hymn.gsub(chorus_regex) {|match| 
  match.gsub(/^([^0-9]+\n)/) { |line| 
    "  #{$1}"
  }
}