用gsub替换Ruby中的s字符串



我有一个字符串

path = "MT_Store_0  /47/47/47/opt/47/47/47/data/47/47/47/FCS/47/47/47/oOvt4wCtSuODh8r9RuQT3w"

我想使用gsub从第一个/47中删除字符串的部分。

path.gsub! '/47/', '/'

预期输出:

"MT_Store_0  "

实际输出:

"MT_Store_0  /47/opt/47/data/47/FCS/47/oOvt4wCtSuODh8r9RuQT3w"
path.gsub! //47.*/, ''

在正则表达式中,/47.*/47及其后面的任何字符匹配。

或者,您可以使用%r编写正则表达式以避免转义斜杠:

path.gsub! %r{/47.*}, ''

如果输出必须是MT_Store_0

那么gsub( //47.*/ ,'' ).strip就是您想要的

这里有两个既不使用Hash#gsub也不使用Hash#gsub!的解决方案。

使用字符串#索引

def extract(str)
  ndx = str.index //47/
  ndx ? str[0, ndx] : str
end
str = "MT_Store_0  /47/47/oOv"
str = extract str
  #=> "MT_Store_0  "
extract "MT_Store_0 cat"
  #=> "MT_Store_0 cat"

使用捕获组

R = /
    (.+?)  # match one or more of any character, lazily, in capture group 1
    (?:    # start a non-capture group 
      /47 # match characters
      |    # or
      z   # match end of string
    )      # end non-capture group
    /x     # extended mode for regex definition
def extract(str)
  str[R, 1]
end
str = "MT_Store_0  /47/47/oOv"
str = extract str
  #=> "MT_Store_0  "
extract "MT_Store_0  cat"
  #=> "MT_Store_0  cat"

相关内容

  • 没有找到相关文章

最新更新