我有一个字符串
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"