Hier fangen ein Beispiel:regex nicht alle Spiele
The two (Senior Officer Stuart & Officer Jess) were intercepted by Officer George.
Nun lassen Sie uns sagen, ich habe zwei Reihen „Officer“ und „Senior Officer“ und wollen ersetzen den Namen nach ihnen mit einem allgemeinen Token "PERSON". Wie Sie sehen können, gibt es drei Namen, die nach einem Rang Stuart, Jess, George
kommen. Ich weiß nicht, warum meine Regex-Lösung nicht alle erfasst. Hier ist mein Code:
public static void main(String[] args) {
String input = "The two (Senior Officer Stuart & Officer Jess) were intercepted by Officer George.";
ArrayList<String> ranks = new ArrayList<String>();
ranks.add("Senior Officer");
ranks.add("Officer");
for (String rank : ranks) {
Pattern pattern = Pattern.compile(".*" + rank + " ([a-zA-Z]*?) .*");
Matcher m = pattern.matcher(input);
if (m.find()) {
System.out.println(rank);
System.out.println(m.group(1));
}
}
}
und hier ist seine Ausgabe:
Senior Officer
Stuart
Officer
Stuart
die Stuart zweimal erfasst (über Vorgesetzter und Offizier), ignoriert aber Jess und George. Ich erwarte, dass dies als Ausgabe zu erhalten:
Senior Officer
Stuart
Officer
Stuart
Officer
Jess
Officer
George
No regex Experte ausreichend sein, aber der Raum sieht verdächtig: '([ a-zA-Z] *?). * ' –
Und ja, du solltest' while' nicht 'if' verwenden –
Etwas wie ,, ..... 'Pattern.compile (". *? "+ Rang +" ([a-zA-Z] *) ");' –