2012-06-06 21 views
5

Ich habe die folgende Zeichenfolge:Extract String nach einem bestimmten Muster

http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true 

Wie kann ich das Teil nach 30/ extrahieren? In diesem Fall ist es 32531a5d-b0b1-4a8b-9029-b48f0eb40a34. Ich habe eine andere Saiten mit dem gleichen Teil bis 30/und danach jede Saite mit anderen ID bis nächsten/was ich will.

+1

eine beliebige Zeichenfolge gegeben, was sind die Regeln, um zu bestimmen, welchen Teil Sie behalten? Behalten Sie nur den Teil, der dem GUID-Format entspricht, das [in .NET mit einem D angegeben ist] (http://msdn.microsoft.com/en-us/library/97af8hh4.aspx)? –

+0

wenn es eine Menge solcher Strings mit unterschiedlichen Präfixen sind und wie Sie ein Muster sagen, könnten Sie Blick auf 'Regular Expressions' will – Ankit

+0

Es wäre besser, wenn Sie http dieser ähnlich do sothing: // Stackoverflow. com/questions/27745/getting-teile-einer-url-regex –

Antwort

3

split Funktion der String Klasse werden Sie in diesem Fall nicht helfen, weil es den Begrenzer verwirft und das ist nicht das, was wir hier wollen. Sie müssen ein Muster machen, das nach hinten schaut. Der Blick hinter synatax ist:

(?<=X)Y 

die jede Y identifiziert, die von einem X vorausgeht.

So in Sie, falls Sie die Muster benötigen:

(?<=30/).* 

das Muster kompilieren, passen Sie es mit Ihrem Eingang, das Spiel finden, und fangen sie:

String input = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true"; 
Matcher matcher = Pattern.compile("(?<=30/).*").matcher(input); 
matcher.find(); 
System.out.println(matcher.group()); 
+0

bekommen gesamte Rest string – user1196969

+0

Entschuldigung, ich dachte, das ist was du willst. dann wäre das Muster: (? <= 30 /) [^ /] * – Untitled

+0

Danke Sahand Mozaffari – user1196969

2

Nur für diesen, oder wollen Sie einen generischen Weg, es zu tun?

String[] out = mystring.split("/") 
return out[out.length - 2] 

Ich denke, das/ist definitiv das Trennzeichen, das Sie suchen. Ich kann das Problem nicht sehen Sie sprechen über Alex

EDIT: Ok, Python hat mich mit Indizes.

+0

Dies funktioniert nicht, da es "/" s nach der "0 /" gibt. –

+0

Deshalb setze ich Größe -1. Um genau zurück zu kommen 32531a5d-b0b1-4a8b-9029-b48f0eb40a34 – jlengrand

+1

Sie geben hier den letzten Teil des Strings zurück, er benötigt den zweitletzten: 'out [length - 2];' –

6

Sie können wie folgt tun:

String s = "http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true"; 
     System.out.println(s.substring(s.indexOf("30/")+3, s.length())); 
+0

Während dies sicherlich eine Antwort auf seine Frage ist, glaube ich nicht, dass er den gesamten Rest der Saite wollte. Und warum würden Sie die 2-Argument-Version der Teilzeichenfolge verwenden, wenn Sie nur die Länge als zweites Argument verwenden möchten? Schlage die 1-Arg-Version nach. – billjamesdev

+0

bekommen gesamten Rest String – user1196969

1

Regulärer Ausdruck, die Antwort ist, denke ich. Wie der Ausdruck geschrieben wird, hängt jedoch vom Datenformat (URL) ab, das Sie verarbeiten möchten. Wie diese:

Pattern pat = Pattern.compile("/Content/SiteFiles/30/([a-z0-9\\-]+)/.*"); 
    Matcher m = pat.matcher("http://xxx/Content/SiteFiles/30/32531a5d-b0b1-4a8b-9029-b48f0eb40a34/05%20%20LEISURE.mp3?&mydownloads=true"); 
    if (m.find()) { 
     System.out.println(m.group(1)); 
    } 
+0

Ich bekomme letzten Teil der Zeichenfolge auch aus diesem d. H. Nach dem letzten/was ich nicht will ich juat wollen zweiten letzten Teil – user1196969

+0

Ich machte ein paar Änderungen an meiner Antwort. –

+0

immer noch bekomme ich letzten Teil der Zeichenfolge – user1196969

Verwandte Themen