2013-03-01 4 views
0

여기에 코드입니다 :Reg-ex를 사용하여 단어 그룹을 찾으려면 어떻게합니까?

String Str ="Animals \n" + 
       "Dog \n" + 
       "Cat \n" + 
      "Fruits \n" + 
       "Apple \n" + 
       "Banana \n" + 
       "Watermelon \n" + 
      "Sports \n" + 
       "Soccer \n" + 
       "Volleyball \n"; 

Str 기본적으로 3 개 종류 (동물, 과일, 스포츠)가 있습니다. 각각 별도의 줄에. 내가 더 잘 이해해야합니다, 그래서 나뿐만 아니라 당신의 대답에가는 설명을 부탁합니다

Apple 
Banana 
Watermelon 

: 나는 열매 '내용을 찾을 수 있습니까 방법, 정규 표현식을 사용하는 저에게이 같은 출력을 줄 것이다 이 문제에 대해.

감사합니다. :)

+0

정규식은 과일'\ P는 {과일} +'왜 작동하지 않습니다 설명해주십시오 : – jitendra

+0

@jitendra 무엇인지 알 수 없습니다. – Javier

+1

@Javier Regex는 애플이 과일이라고 말할 수 없다는 것을 의미했습니다. 그리고, 나는 풍자하고 있었다. 카테고리 (Fruits, Sports)를 일반 엔티티와 구별하는 마커가 없으면 구현을 향상시킬 수 있습니다. – jitendra

답변

1

단어 "과일"과 "스포츠"사이의 텍스트를 추출하려는 경우 정규식을 capturing group으로 사용할 수 있습니다. 이렇게하면 문자열이 일치하면 원하는 텍스트가 포함 된 group을 추출해야합니다. 예를 들어

:

Pattern p = Pattern.compile("Fruits(.*?)Sports", Pattern.DOTALL); 
// The string "Fruits" ------^ ^^ ^
// Capture everything in between --^ ^ ^
// The string "Sports" -----------------^  ^
// This tells the regex to treat newlines  ^
// like normal characters ---------------------^ 

아래 railroad diagram 참조 : 또는

a railroad diagram of the image

, 당신은 positive lookahead and lookbehinds를 사용하여 고급 정규 표현식을 사용할 수 있습니다. 즉 정규 표현식에서 "과일"과 "스포츠"라는 단어 사이의 텍스트를 계속 찾도록 할 수는 있지만 해당 문자열 자체는 경기의 일부로 간주하지 않습니다.

Pattern p = Pattern.compile("(?<!Fruits).*?(?=Sports)", Pattern.DOTALL); 
+0

+1 이해하기 쉬운 설명 – Pshemo

+0

고마워. 이것은 제가받은 최고의 답변입니다. 나는 지금 개념을 이해했다고 생각한다. :) –

0

문자열을 단어 배열 (String[] words = Regex.Split(Str, "\n");)로 분할 한 다음 words 배열을 반복하면서 해당 항목을 적절한 범주에 추가하고 제목을 볼 때 범주 간을 전환합니다.

관련 문제