我有一个字符串
path = "MT_Store_0 /47/47/47/opt/47/47/47/data/47/47/47/FCS/47/47/47/oOvt4wCtSuODh8r9RuQT3w"
我想使用/47
从第一个gsub
删除字符串的一部分。
path.gsub! '/47/', '/'
预期产出:
"MT_Store_0 "
实际输出:
"MT_Store_0 /47/opt/47/data/47/FCS/47/oOvt4wCtSuODh8r9RuQT3w"
答案 0 :(得分:2)
path.gsub! /\/47.*/, ''
在正则表达式中,\/47.*
匹配/47
及其后的任何字符。
或者,您可以使用%r
编写正则表达式以避免转义正斜杠:
path.gsub! %r{/47.*}, ''
答案 1 :(得分:0)
如果输出必须为MT_Store_0
然后gsub( /\/47.*/ ,'' ).strip
就是你想要的
答案 2 :(得分:0)
以下是两个既不使用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"