2009-10-19 14 views
1

Java 코드에서 정규식을 적용하는 데 문제가 있습니다.
내 텍스트 문자열 내가 이름 정보 (ABC 방송 데프)을 추출해야Regex - Java 문자열에서 정보 추출

 name: Abc Def; 
     blah: 1 2 3; 
     second name: Ghi; 

이 (문자열을 MyString)과 같다. 이름에는 1 개 이상의 단어가 포함될 수 있습니다. 모든 속성 (이름, ㅋ, 두 번째 이름은) 처음에 약간의 공백으로 이격되어있다

내가 사용하려고 해요 코드는

String patternStr = "\\s{2,}name:\\s([\\w ]*\\w+);"; 
Matcher matcher = Pattern.compile(patternStr).matcher(myString); 
if (matcher.matches()) 
    System.out.println(matcher.group(1)); 

내 정규식 online tools (정규식으로 잘 작동 것입니다 : \ {2,} 이름 : \ s ([\ w] * \ w +);)하지만 자바 코드로 포팅하면 간단히 작동하지 않습니다. 제가 누락 된 것에 대한 아이디어는?

덕분에 많은


편집 : 나는() matcher.find를 사용하는 경우는 잘 작동합니다. 여기

답변

2

이 문제는 아마 전체 입력 라인에 맞게 그 .match() 시도이다 세미콜론 거기에 있는지 확인합니다 다음 세미콜론 전에 아무것도 캡처합니다. 따라서 패턴 끝 부분에. +를 추가하여 나머지 줄을 사용하거나 .contains()을 사용할 수 있습니다. 정규식에 대한 .compile(patternStr, Perl5Compiler.MULTILINE_MASK)

5

나중에 가서 :

^\s*name:\s*([^;]+); 
  • 시작 줄의 시작 부분에.
  • 많은 공백을 둡니다.
  • "이름 :"을 찾으십시오.
  • 많은 공백을 넣으십시오.
+0

감사 : 당신은 멀티 라인 입력에 일치 할 때 플래그를 제공 할 필요가

주 (패턴의 시작과 끝에서 .match()^$로 암시 적이다) 개선하지만 matcher.matches()를 호출 할 때 문제가 있다고 생각합니다. matcher.find()를 사용하면 잘 작동합니다. – mickthompson