问题 Ruby中有正则表达式删除吗?


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


6685
2018-03-31 21:43


起源

这三个角色真的对你有用吗? - Dave Newton
大声笑似乎做了很多字符串删除。但是通过gsub这样做,似乎我做错了。它应该通过string.delete完成,不是吗? - Mr. Demetrius Michael
string.delete只接受要删除的字符,没有正则表达式。 string.slice!可以用来删除基于正则表达式的字符串的一部分但是比gsub更长... - Pafjo
delete 不采用正则表达式。您始终可以创建类似的String方法 gdel 或者做你想做的事。 - Dave Newton
你需要在每个字符串或多个位置的一个位置执行此操作吗?你的表达有 gsub (代替 sub)这意味着你期待多场比赛,但你也有 \A 在正则表达式中,这意味着你只期待一场比赛。根据这一点,解决方案变得不同。 - sawa


答案:


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

class String

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

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

end

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

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


5
2018-04-01 05:03



+1,虽然我很惊讶没人投票。 - Mr. Demetrius Michael


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

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

5
2018-03-31 22:35





我不这么认为。

String :: delete删除字符,与正则表达式不匹配,这是一种完全不同的方法。

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

这是要走的路,我想:)


3
2018-03-31 22:06



@Vache哈哈,对。纠正了它:P - Castilho