给定一个字符串,如何匹配4个空格的所有实例并替换?

时间:2012-01-17 20:11:19

标签: ruby regex

给出一个像这样的字符串:

Normal P start

<pre><code>
        feed &lt;&lt; feed_item.attributes.merge({
          :photo_url = "XXX",
          :full_name ="XXX",
          :meta = "XXX"
        })
</code></pre>

Normal P End

我想在<pre><code>代码中找到4个空格的所有实例,然后将这些匹配替换为''

这是我到目前为止所拥有的:

  

http://rubular.com/r/Zs6RY3AFXp

连连呢?关于如何做这个红宝石?

已更新

在尝试将用于标记的4个空格修剪为代码之前输出:

<div class="message">Normal P start

<pre><code>        feed &lt;&lt; feed_item.attributes.merge({
          :photo_url =&gt; "XXX",
          :full_name =&gt; "XXX",
          :meta =&gt; "XXX"
        })
</code></pre>
Normal P end</div>

2 个答案:

答案 0 :(得分:1)

我确信有一种方法可以用一个正则表达式做到这一点,但我已经不耐烦了,以稍微昂贵的方式做到这一点:

str.match(/(<pre><code>)(.*)(<\/code><\/pre>)/)
head = $1
sub_str = $2
tail = $3
sub_str.gsub!('    ','')
str = [head, sub_str, tail].join

答案 1 :(得分:1)

string = <<EOS
<div class="message">Normal P start

<pre><code>        feed &lt;&lt; feed_item.attributes.merge({
          :photo_url =&gt; "XXX",
          :full_name =&gt; "XXX",
          :meta =&gt; "XXX"
        })
</code></pre>
Normal P end</div>
EOS

puts string.gsub(/<pre><code>(.*)<\/code><\/pre>/m) { $&.gsub(/(?<=<pre><code>)\s*/, "\n").gsub(/^\s{4}/, '') }