例如我有url字符串,如:
https://abc.s3-something.amazonaws.com/subfolder/1234/5.html?X-Amz-Credential=abcd12bhhh34-1%2Fs3%2Faws4_request&X-Amz-Date=2016&X-Amz-Expires=3&X-Amz-SignedHeaders=host&X-Amz-Signature=abcd34hhhhbfbbf888ksdskj
从这个字符串我需要提取在子文件夹/后面的数字1234。我试过用gsub但没有运气。任何帮助将不胜感激。
答案 0 :(得分:3)
假设您的网址已保存在名为url
的变量中。
然后,以下内容应返回1234
url.match(/subfolder\/(\d*)/)[1]
说明:
url.match(/ # call the match function which takes a regex
subfolder\/ # search for the first appearance of the string 'subfolder/'
# note: we must escape the `/` so we don't end the regex early
(\d*) # match any number of digits in a capture group,
/)[1] # close the regex and return the first capture group
答案 1 :(得分:1)
url = 'http://abc/xyz'
index= url.index('/abc/')
url[index+5..length_of_string_you_want_to_extract]
希望,这有帮助!
答案 2 :(得分:1)
lwassink有正确的想法,但它可以更简单地完成。如果subfolder
始终相同:
url = "https://abc.s3-something.amazonaws.com/subfolder/1234/5.html?X-Amz-Credential=abcd12bhhh34-1%2Fs3%2Faws4_request&X-Amz-Date=2016&X-Amz-Expires=3&X-Amz-SignedHeaders=host&X-Amz-Signature=abcd34hhhhbfbbf888ksdskj"
url[/subfolder\/\K\d+/]
# => "1234"
\K
会丢弃匹配的文本,因此只返回"1234"
。
如果您想在任何子文件夹之后获取该号码,并且域名始终相同,您可以改为:
url[%r{amazonaws\.com/[^/]+/\K\d+}]
# => "1234"
答案 3 :(得分:1)
s.split('/')[4]
如果您愿意,最后添加.to_i
。
或者,将其键入一个子串,就像你要求的那样......
a = s.split '/'
a[a.find_index('subfolder') + 1]
或者,以单行为单位表示我可以:
s.split('/').tap { |a| @i = 1 + a.find_index('subfolder')}[@i]
或者,因为我是一个受损的人,我实际上会这样写:
s.split('/').tap { |a| @i = 1 + (a.find_index 'subfolder')}[@i]