Ruby:从文本中删除新行,回车符

时间:2016-12-28 18:24:16

标签: ruby-on-rails ruby regex

我有一个像这样的文本字符串,我需要删除所有回车和反斜杠。

  

牛来到一个芦苇池喝酒。当他大量涌入   水,他把一只年轻的青蛙压碎了泥浆。\ r \ n \ r \ n老青蛙   很快就错过了那个小家伙,并问他的兄弟姐妹们有什么   成了他。\ r \ n \ r \ n \"一个伟大的大怪物,\#34;他们其中一个说,   \"用他的一只大脚踩到了小弟弟!\" \ r \ n \ r \ n \"大,   是他!\"老青蛙说,喘不过气来。 \"他是不是很大   这个?\" \ r \ n \ r \ n \"哦,更大!\"他们哭了。\ r \ n \ r \ n青蛙喘着粗气   还有更多。\ r \ n \ r \ n \"他不可能比这更大,\"她   说过。但小青蛙们都宣称怪物很多,   更大,老青蛙越来越多地喘不过气来   直到,一下子,她爆了。\ r \ n

我尝试了这个,但这仍然留下了反斜杠。

text.gsub(/\r?\n|\r/, "")
  

"牛来到一个芦苇池喝酒。当他大量涌入   水,他把一只年轻的青蛙压碎成泥。老青蛙很快   错过了小家伙,问他的兄弟姐妹们有什么   变成了他。 \#34;一个伟大的大怪物,\#34;他们其中一人说,“走了   在他的一个巨大的脚上的小弟弟!\" \"大,是他!\"说过   老青蛙,喘不过气来。 \"他这么大吗?\" \"哦,   更大!\"他们哭了。青蛙还喘不过气来。 \"他可以   没有比这更大,\"她说。但是所有的小青蛙   宣称这个怪物更大,更大,老青蛙保持着   越来越多地喘不过气来,直到她突然爆发。 "

以下表达式似乎与www.rubular.com处的正确模式匹配,包括单独的反斜杠,但似乎在我的控制台中无效(Ruby 2.2.1)

text.gsub(/(\\r\\n)|\\/, "")

注意:对于完全公开,此文本字符串将在HTML编辑器中捕获并存储到数据库列中。我需要删除HTML字符,并使用以下内容 -

text = ActionView::Base.full_sanitizer.sanitize(page.content).gsub(/\r?\n|\r\\|\\/, "")

感谢您提供的任何帮助!

1 个答案:

答案 0 :(得分:4)

执行此操作的最有效方法是使用String#delete(或#delete!):

text.delete!("\r\n\\")
p text
puts
puts text

输出:

  

"牛来到一个芦苇池喝酒。当他大量涌入   水,他把一只年轻的青蛙压碎成泥。老青蛙很快   错过了小家伙,问他的兄弟姐妹们有什么   成为他的。\"一个伟大的大怪物,\#34;他们其中一人说,“踩到了。”   他的一个巨大的脚的小弟弟!\" \"大,是他!\"说   老青蛙,喘不过气来。 \"他这么大吗?\" \"哦,太多了   !大\"他们哭了。青蛙还喘不过气来。\"他不能拥有   比这还大,\"她说。但小青蛙们都宣称了   那怪物多得多,大得多,老青蛙不停地吹着   她自己越来越多,直到她突然爆发。"

     

牛来了   到一个芦苇池喝。当他大量泼水时,   他把一只年轻的青蛙压成泥浆。老青蛙很快就错过了   小家伙,问他的兄弟姐妹们成了什么   他是一个伟大的大怪物,#34;他们其中一人说,"踩得很少   兄弟,他的一个巨大的脚!""大,是他!"老青蛙说,   膨胀起来。 "他这么大吗?""哦,更大!"他们   哭了起来。青蛙还喘不过气来。"他不可能变得更大   比这个,#34;她说。但小青蛙们都宣称了   怪物更大,更大,老青蛙不停地膨胀   越来越多,直到她突然爆发。

基准测试结果:

Warming up --------------------------------------
         String#gsub     2.826k i/100ms
           String#tr    35.794k i/100ms
       String#delete    37.147k i/100ms
Calculating -------------------------------------
         String#gsub     29.801k (± 2.8%) i/s -    149.778k in   5.030044s
           String#tr    399.391k (± 3.3%) i/s -      2.004M in   5.024297s
       String#delete    411.065k (± 4.0%) i/s -      2.080M in   5.068783s

我使用/\R+|\//作为String#gsub方法。