Ruby 如何使用正则表达式修剪空行?

Ruby 如何使用正则表达式修剪空行?,ruby,regex,Ruby,Regex,给定字符串str: 问题在于,这会产生: 你在自己的线路上没有其他东西吗?我想你要找的是: 在你第一次参加gsub后,你对这件事有何感想 对于长正则表达式来说,这并不是一个真正的问题。使用该方法可以实现这一点,但固定在模式上会给问题蒙上阴影: \n 放置html.subcode,格式化的\u代码 这将输出: 代码寻找以四个空格字符开头的行,并将它们作为数组返回,用回车符连接它们,然后用块包装它们 这不适用于多个非连续的缩进代码块,但只要稍微重新设计一下就可以了 我们常常专注于某个特定的解决方案,

给定字符串str:

问题在于,这会产生:


你在自己的线路上没有其他东西吗?

我想你要找的是:


在你第一次参加gsub后,你对这件事有何感想


对于长正则表达式来说,这并不是一个真正的问题。使用该方法可以实现这一点,但固定在模式上会给问题蒙上阴影:

\n 放置html.subcode,格式化的\u代码 这将输出:

代码寻找以四个空格字符开头的行,并将它们作为数组返回,用回车符连接它们,然后用块包装它们

这不适用于多个非连续的缩进代码块,但只要稍微重新设计一下就可以了


我们常常专注于某个特定的解决方案,并认为它必须以某种方式出现。正则表达式以这种方式特别诱人。它们的复杂性增长非常快,很难维护。

应该是str=str.gsub,还是gsub!故意的此外,这仍然会在前代码tagsHmmm之后出现新行。您的输入必须不同。我只是用上面的输入再次运行了它,虽然我注意到最后一行应该在\n之后出现,但它完全按照广告中的那样运行。但是如果你多次运行它会导致多组标签。正常P启动后的空白行可能是一行空白导致错误-如果用[\r\n] *替换第一个n*会怎么样?
str.gsub!(/\n(\s*\n)+/, "\n")
re = /((?:^(?:[ ]{4}|\t).*$(?:\r?\n|\z))+)/
str = str.gsub(re, "<pre><code>\n\\1\n</code></pre>")
Normal P start

<pre><code>

        feed << feed_item.attributes.merge({
          :photo_url => feed_item.user.cloudfront_url(:thumb),
          :full_name => full_name,
          :meta => '',
          :embed_preview => embed_preview,
          :embed_preview_meta => embed_data
        })
</code></pre>
Normal P end
Normal P start
<pre><code>
        feed << feed_item.attributes.merge({
          :photo_url => feed_item.user.cloudfront_url(:thumb),
          :full_name => full_name,
          :meta => '',
          :embed_preview => embed_preview,
          :embed_preview_meta => embed_data
        })
</code></pre>
Normal P end
re = /\n*((?:^(?:[ ]{4}|\t).*$(?:\r?\n|\z))+)\n*/
str.gsub!(re, "\n<pre><code>\n\\1</code></pre>")
str.gsub!(/\n(\s*\n)+/, "\n")
html = <<EOT

    feed << feed_item.attributes.merge({
      :photo_url => feed_item.user.cloudfront_url(:thumb),
      :full_name => full_name,
      :meta => '',
      :embed_preview => embed_preview,
      :embed_preview_meta => embed_data
    })

EOT

code = html.scan(/^ {4}.+/).join("\n")
formatted_code = "\n<pre><code>\n" + code + "\n</code></pre>\n"
puts html.sub(code, formatted_code)
<pre><code>
    feed << feed_item.attributes.merge({
      :photo_url => feed_item.user.cloudfront_url(:thumb),
      :full_name => full_name,
      :meta => '',
      :embed_preview => embed_preview,
      :embed_preview_meta => embed_data
    })
</code></pre>