2017-03-14 1 views
0

My String wie dieser ist (eine Zeile):Suche alle Vorkommen eines RegexMuster in einer Linie

String input = "Details of all persons. Person=details=John Smith-age-22; Person=details=Alice Kohl-age-23; Person=details=Ram Mohan-city-Dallas; Person=details=Michael Jack-city-Boston;" 

Ich mag regex die Personen alle mit seinen Details passend, um herauszufinden, mit (im Wesentlichen Text von Details bis zum Semikolon). Ich bin daran interessiert zu finden:

details=John Smith-age-22 
details=Alice Kohl-age-23 
details=Ram Mohan-city-Dallas 
details=Michael Jack-city-Boston 

Kann mir jemand sagen, wie das geht? Entschuldigung, ich konnte im Internet kein Beispiel finden. Vielen Dank.

Antwort

0

Sie können diesen Code versuchen.

public static void main(String[] args) { 
    String input = "Details of all persons. Person=details=John Smith-age-22; Person=details=Alice Kohl-age-23; Person=details=Ram Mohan-city-Dallas; Person=details=Michael Jack-city-Boston;"; 
    Pattern pattern = Pattern.compile("(?<=Person=).*?(?=;)"); 
    Matcher matcher = pattern.matcher(input); 
    while (matcher.find()) { 
     String str = matcher.group(); 
     System.out.println(str); 
    } 
} 

Keine Behauptung

public static void main(String[] args) { 
    String input = "Details of all persons. Person=details=John Smith-age-22; Person=details=Alice Kohl-age-23; Person=details=Ram Mohan-city-Dallas; Person=details=Michael Jack-city-Boston;"; 
    Pattern pattern = Pattern.compile("Person=.*?;"); 
    Matcher matcher = pattern.matcher(input); 
    while (matcher.find()) { 
     String str = matcher.group(); 
     System.out.println(str.substring(7, str.length()-1)); 
    } 
} 
+0

Dank für die prompte Antwort, das hilft! Allerdings war mir Lookahead/Lookbehind vorher nicht bewusst. Obwohl ich jetzt den Doc durchging, aber ich möchte wissen, ob es auch anders geht (außer Lookahead etc.)? Kannst du auch erklären, warum wir das zweite "?" Zeichen im Muster? Wie hilft das? – sburnwal

+0

In '. *?' Ist das '?' Schlüsselwort von 'Reluctant quantifiers'. Bitte lesen Sie das Hilfedokument von "Reluctant quantifiers". Wenn nicht das '?', Wird das Ergebnis 'Details = John Smith-age-22; Person = Details = Alice Kohl-Alter-23; Person = Details = Ram Mohan-Stadt-Dallas; Person = Details = Michael Jack-Stadt-Boston. – fxleyu

0

Ich vermute, Sie werden es finden am einfachsten, wenn Sie setzen Sie die Felder für die in Gruppen suchen, so dass Sie die Details extrahieren Sie wollen.

Etwas wie:

Pattern personPattern = Pattern.compile("Person=details=(\\w+)-(age-\\d+|city-\\w+); "); 

Matcher matcher = personPattern.match(input); 
while (matcher.find()) { 
    String name = matcher.group(1); 
    String field = matcher.group(2); 
    ... 
} 
Verwandte Themen