2016-04-08 19 views
0

ich Java Regex bin mit lesen String des TypsCorrect Regular Expression

"{\n 'Step 1.supply.vendor1.quantity':\"80"\,\n 
     'Step 2.supply.vendor2.quantity':\"120"\,\n 
     'Step 3.supply.vendor3.quantity':\"480"\,\n 
     'Step 4.supply.vendor4.quantity':\"60"\,\n}" 

Ich habe zu erkennen Strings vom Typ

'Step 2.supply.vendor2.quantity':\"120"\,\n. 

Ich versuche, Muster und Matcher von Regex zu verwenden aber ich bin nicht in der Lage den richtigen regulären Ausdruck für Zeilen, um herauszufinden, wie

<Beginning of Line><whitespace><whitespace><'Step><whitespace><Number><.><Any number & any type of characters><,\n><EOL>. 

die <Beginning of Line> und 012.300.habe ich zur Verdeutlichung verwendet.

Ich habe mehrere Muster versucht

String regex = "(\\n\\s{2})'Step\\s\\d.*,\n"; 
String regex = "\\s\\s'Step\\s\\d.*,\n"; 

Ich bekomme immer Illegal: Kein Ergebnis gefunden gefunden.

Ich bin nicht in der Lage, richtiges Material zum Lesen auf Java Regex mit guten Beispielen zu finden. Jede Hilfe wäre wirklich großartig. Vielen Dank.

+2

, das wie JSON-Format aussieht, sind Sie sicher, dass Sie Möchten Sie keine JSON-Parsing-Bibliothek verwenden? –

+0

Dies ist JSON, Sie sollten einen JSON-Parser verwenden ... –

+0

@JoseCifuentes Ja, das ist JSON-Format. Ich konvertiere es in JSONObject nach dem Lesen dieser Daten aus der Datei. Und dann Wert für einen bestimmten Schlüssel abrufen. Aber um den Wert für einen Schlüssel zu holen, muss ich meine JSON-Daten wie folgt haben: "Step 2.supply.vendor2.quantity": "120", "Step 3.supply.vendor3.quantity": "480", d. ohne die Zeichen \ n und \ – user3263235

Antwort

0

Wie die anderen in den Kommentaren sagten, sollten Sie wirklich einen JSON-Parser verwenden.

Aber wenn Sie wollen sehen, wie es mit einem regex arbeiten konnte, ist hier, wie Sie es tun können:

  • Nehmen wir ein Beispiel einer Linie wollen Sie erfassen: Step 1.supply.vendor1.quantity':"80"
  • ersetzen Ziffern mit \\d* (\\d Matches jede Ziffer)
  • Punkte Ersetzen mit \\. (Punkte müssen maskiert werden)
  • einige Klammern um die Teile hinzufügen, die Sieerfassen
  • wollen Hier

ist die resultierende regex: "Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\""

Verwenden Sie nun ein Regex und ein Matcher:

String input = "{\n 'Step 1.supply.vendor1.quantity':\"80\"\\,\n"; 
Pattern pattern = Pattern.compile("Step (\\d*)\\.supply\\.vendor(\\d*)\\.quantity':\"(\\d*)\""); 
Matcher matcher = pattern.matcher(input); 
while(matcher.find()) { 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
    System.out.println(matcher.group(3)); 
} 

Ausgang:

1 //(corresponds to "Step (\\d*)") 
1 //(corresponds to "vendor(\\d*)") 
80 //(corresponds to "quantity':\"(\\d*)") 
+0

Welche API kann ich in der JSON-Parser-Bibliothek für die Regex-Matching-Funktion verwenden? – user3263235