【问题标题】:Is there a Regex Delete in Ruby?Ruby 中有正则表达式删除吗?
【发布时间】:2012-03-31 21:43:16
【问题描述】:

我所有的带有正则表达式的字符串删除都使用 gsub,有没有更短的方法? string.gsub(/\A.*\//,'')

【问题讨论】:

  • 这三个角色真的让你心动了吗?
  • 大声笑似乎做了很多字符串删除。但是通过 gsub 来做,好像我做错了。应该是通过string.delete来完成的吧?
  • string.delete 只需要删除哪些字符,没有正则表达式。字符串切片!可用于根据正则表达式删除部分字符串,但比 gsub 长...
  • delete 不采用正则表达式。你总是可以创建一个像gdel这样的String方法或者你想要的东西。
  • 您需要在每个字符串的一个位置或多个位置执行此操作吗?您的表达式有gsub(而不是sub),这意味着您期待多个匹配项,但您在正则表达式中也有\A,这意味着您只期待一个匹配项。取决于此,解决方案变得不同。

标签: ruby regex string ruby-1.9 gsub


【解决方案1】:

一种方法是添加自己的短方法:

class String

  def del(regexp)
    gsub(regexp,'')
  end

  def del!(regexp)
    gsub!(regexp,'')
  end

end

通常,此代码将放在 lib/ 目录中,例如 lib/string-extensions.rb

请注意,一些程序员真的不喜欢这个,因为它是猴子补丁。我个人喜欢它用于项目,因为它使代码更容易理解——一旦我有了“del”方法,我可以很快看到对它的调用只是删除了正则表达式。

【讨论】:

    【解决方案2】:

    您可以改为指定要 保留 的字符串部分。 . .

    string[/[^\/]*$/]
    

    【讨论】:

      【解决方案3】:

      我不这么认为。

      String::delete 删除字符,和正则不匹配,完全不同的做法。

      我能想到的让你的那行“更短”的唯一方法是使用string.gsub!(/\A.*\//,'')(注意那里的砰砰声)。

      我认为这就是要走的路:)

      【讨论】:

        【解决方案4】:

        您可以通过在参数中指定正则表达式来使用 String::delete

        假设您想从字符串中删除所有非 AlphaNumeric...

        a="Test String with &(*ille#*)gal char!@#acters ^lorem % ipsum $"
        
        a.delete!('^a-zA-Z0-9 .')
        

        当然要小心包含 WhitespaceDOT

        以上代码将产生以下输出

        "Test String with illegal characters lorem  ipsum "
        

        这只是一个例子。

        希望这会有所帮助:)

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多