2016-08-02 8 views
0

Zum Beispiel habe ich url String wie:Wie extrahiere ich einen Teil der Zeichenkette, die nach einer gegebenen Teilzeichenkette kommt?

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 

Aus dieser Zeichenfolge Ich brauche zu extrahieren Nummer 1234, die nach dem Unterordner/kommt. Ich habe es mit gsub versucht, aber kein Glück. Jede Hilfe wäre willkommen.

+0

Ist 'Unterordner' immer gleich? Ist der Domainname immer gleich? –

+1

Ich schlage vor: 1) Sie reduzieren die Länge Ihrer Zeichenfolge. Vielleicht beende es vor "Amz-Credential". Die Frage wird nicht geändert, und die Leser müssen nicht horizontal scrollen, um die Zeichenfolge zu lesen. 2) Weisen Sie der Zeichenfolge eine Variable zu (z. B. "str =" http ... "'), damit die Leser dies nicht tun müssen. Sie können sich nur auf die Variable beziehen. 3) beantworte @ Jordans Frage. –

Antwort

2

Angenommen, Ihre URL wird in einer Variablen namens url gespeichert. Dann sollte die folgende 1234

url.match(/subfolder\/(\d*)/)[1] 

Erklärung zurück:

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 
+0

In diesem Fall würde ich \ d + verwenden, um sicherzustellen, dass es mindestens eine Ziffer in der erfassten Gruppe gibt (die URL wäre nicht sinnvoll mit zwei aufeinanderfolgenden "/" Zeichen – Bustikiller

1
url = 'http://abc/xyz' 

index= url.index('/abc/') 
url[index+5..length_of_string_you_want_to_extract] 

Hope, das hilft!

+1

abc ist Dummy-String, nach dem Sie eine Nummer wollen, und die Länge (3) wird sich entsprechend ändern, in Ihrem Fall wird es 6 sein – Lavika

+0

yeah! Du hast recht. – Lavika

+0

Fertig..Thanks ... – Lavika

1

lwassink die richtige Idee hat, aber es kann einfacher durchgeführt werden. Wenn subfolder ist immer das gleiche:

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" 

Die \K verwirft den gefundenen Text zu diesem Punkt, also nur "1234" zurückgegeben.

Wenn Sie die Nummer nach jeder Unterordner erhalten möchten, und der Domain-Name ist immer die gleiche, könnte man dies stattdessen tun:

url[%r{amazonaws\.com/[^/]+/\K\d+}] 
# => "1234" 
+0

Ich habe die behoben Tippfehler. –

1
s.split('/')[4] 

hinzufügen .to_i am Ende, wenn Sie mögen.

Oder es auf einer Teil einzugeben, wie Sie für ...

a = s.split '/' 
a[a.find_index('subfolder') + 1] 

Oder gefragt, es als Einzeiler zu tun, nehme ich Sie könnte:

s.split('/').tap { |a| @i = 1 + a.find_index('subfolder')}[@i] 

Oder, Da ich eine beschädigte Person bin, würde ich tatsächlich schreiben:

s.split('/').tap { |a| @i = 1 + (a.find_index 'subfolder')}[@i] 
Verwandte Themen