다음은 예입니다 일치 잡으려고 실패 "사람". 보시다시피, 등급이 Stuart, Jess, George
인 세 개의 이름이 있습니다. 내 정규 표현식 솔루션이 모든 것을 포착하지 못하는 이유를 모르겠습니다. 여기정규식은 모든
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));
}
}
}
및 출력입니다 : 여기 내 코드입니다
Senior Officer
Stuart
Officer
Stuart
(수석 책임자 및 담당자를 통해)를 두 번 스튜어트를 캡처하지만, 제스와 조지을 무시합니다. 나는 출력으로이 얻을 것으로 기대하고있다 :
Senior Officer
Stuart
Officer
Stuart
Officer
Jess
Officer
George
(의견에 따라), 그러나 그 공간은 의심스러운'([ a-zA-Z] *?). *' –
네,'if'가 아니라'if'를 사용해야합니다. –
Pattern.compile (". *?"+ rank + "([a-zA-Z] *)"); ' –