我正在解析一个txt文件(一本古老的赞美诗书)。我想做以下事情:
我已尝试过此代码:
chorus_regex = /([^0-9]+\n)+/
puts hymn.gsub(chorus_regex) {|match| match.gsub(/^([^0-9]+\n)/, " \1")}
但第二个gsub
只影响第一行?我认为这是因为\1
可能适用于第一个正则表达式,而不是第二个正则表达式
你如何编写嵌套的gsubs,这样你就可以抓取txt的块,在这些块上做一个gsub,然后用结果替换旧块?
修改
我简化了正则表达式,所以问题集中在如何嵌套正则表达式gsubs,而不是分散复杂的正则表达式或编码错误的字符。
答案 0 :(得分:0)
要嵌套gsubs,请确保为gsubs使用块,并且可以使用perlisms(第一组$ 1等)。
chorus_regex = /([^0-9]+\n)+/
puts hymn.gsub(chorus_regex) {|match|
match.gsub(/^([^0-9]+\n)/) { |line|
" #{$1}"
}
}