2012-09-06 7 views
0

그래서 Project에서 Java의 .doc 파일에서 대문자 단어를 추출하려고합니다. 내가 정규식을 사용하고 있지만, 아래의 정규식은 옛 .vba 스크립트에서 someonelse에 의해 사용되었습니다. 나는 대문자로 둘러싸인 모든 대문자를 찾아야합니다. 예 (WORD). 나는 아래 정규식이 나를 위해 매달려 메타 문자 오류를 줄 것이다 그래서 정규식이 될 것이라고 알아.RegEx에서 Apache POI를 사용하여 대문자 단어를 추출

private static final String REGEX = "(*[A-Z]*[A-Z]*)"; 
private void parseWordText(File file) throws IOException { 
    FileInputStream fs = new FileInputStream(file); 
    HWPFDocument doc = new HWPFDocument(fs); 
    WordExtractor we = new WordExtractor(doc); 
    if (we.getParagraphText() != null) { 
     String[] dataArray = we.getParagraphText(); 
     for (int i = 0; i < dataArray.length; i++) { 
      String data = dataArray[i].toString(); 
      Pattern p = Pattern.compile(REGEX); 
      Matcher m = p.matcher(data); 
      List<String> sequences = new Vector<String>(); 
      while (m.find()) { 
       sequences.add(data.substring(m.start(), m.end())); 
       System.out.println(data.substring(m.start(), m.end())); 
      } 
     } 
    } 
} 

위의 코드와 정규식은 괄호로 대문자 만 사용하는 것이 아니라 두 개의 대문자를 사용합니다.

+0

Regex는 임의의 수의 왼쪽 괄호 (아무 것도 포함하지 않음) 뒤에 임의의 수의 대문자 (none 포함)와 일치하고 오른쪽 괄호 하나가 뒤에 오는 것을 말합니다. ')','(()','((((((AA)'는 모두이 정규 표현식과 일치한다. A)'또는'(AA)'? – FrankieTheKneeMan

+0

미안하지만 잘 설명하지 못했습니다. 대소 문자는 왼쪽 괄호 뒤에 있고 오른쪽 괄호 앞에옵니다.하지만 자바에서 정규식을 사용하면 매달려 있습니다. 메타 문자 오류 – yams

+0

두 개 이상의 대문자가 일치해야합니까? (또한 일치해야합니까?) 또한이 정규식을 컴파일하는 데 사용하는 패키지는 무엇입니까? 실제 코드를 제공 할 수 있습니까? – FrankieTheKneeMan

답변

1

괄호는 정규 표현식에서 예약 된 문자이므로 첫 번째 *은 아무 것도 수정하지 않습니다. 적어도, 당신은 그들을 탈출해야합니다 :

\(*[A-Z]*[A-Z]*\) 

그러나 아직 읽지 마세요! 위의 정규식은 다음과 같습니다 :

\(*[A-Z]*\) 

하지만 가장 중요한 것은 원하는 정규 표현식이 아니라고 생각합니다. 난 당신이 괄호로 둘러싸인 연속 대문자의 아닌 숫자를 캡처하려는 생각, 또는 :

\([A-Z]+\) 

는 '+'는 하나 또는 그 이상의 일치, 당신은 내가 중지 한 알 것이다 왼쪽 팸을 반복했다.

\(\s*[A-A]+\s*\) 

을하지만 그건 새로운 라인을 통해 일치되므로주의 : 보너스 포인트의 경우, 괄호의 시작이나 끝 부분에 공백을 처리 할 수 ​​있습니다. 희망이 도움이!

+0

Sweet man, thanks Frankie ... 나는 그것에 대한 빠른 응답에 감사드립니다. 나는 Java에 매우 강하지 만 나는 결코 정규 표현식을 많이 사용했습니다. – yams

+0

이제 [A-Z] [A-Z] +와 같이 두 개 이상의 대문자를 캡처하려고했지만 그곳의 임의의 자리를 찾는 경우 어떻게해야할까요? – yams

+0

그래서 대문자로 시작한 다음 적어도 하나 이상의 대문자 또는 숫자가 따라옵니다. 그런데 임의의 반복은 정규 표현식에서'A {min, max} '로 할 수 있습니다. 그래서 두 개 이상의 대문자 인 경우 :'[AZ] {2, }'정확한 반복은 단순히 쉼표를 피합니다. – FrankieTheKneeMan

관련 문제