2011-11-05 4 views
0

이의 내가 문자열을 가지고 있다고 가정 해 봅시다 :해당 인덱스의 문자열에서 단어 찾기

-dog--cat--d--

내가 그 문자열에서 모든 단어를 찾을 싶습니다, 그리고 길이가해야 1보다 큰

하지만 무엇보다, 각 단어의 첫 번째와 마지막 색인을 알고 싶습니다.

어떻게하면됩니까?

구조체를 만들려고했습니다. 일부 데이터 (인덱스 시작 및 중지, 단어, 길이 등)를 저장할 수 있습니다.

하지만 그 단어를 얻는 방법을 찾는 방법을 모르겠습니다.

지금까지는 값 0과 1을 저장하는 배열을 만들었습니다 (요소가 '-'이면 0, else 1). 아무도 도와 줄 수 있습니까? :)

+1

"단어"는 어떻게 정의합니까? 2 개 이상의 유니 코드 문자 시퀀스? –

+0

[suffix tree] (http://en.wikipedia.org/wiki/Suffix_tree)가 귀하의 요구 사항을 충족 시키므로 귀하가 이해하는 바에 따라 귀하의 요구 사항이 달라질 수 있습니다. –

+0

@ MarkByers, 나는 "-"사이의 유니 코드 문자를 정의한다. ''-dog- "=> dog' – deadfish

답변

2

당신은 2 개 이상의 연속 문자를 찾기 위해 정규 표현식 @"\p{L}{2,}"를 사용할 수의 배열을 반환하는 정규 표현식를 사용하여 가장 좋은 것입니다 :

foreach (Match match in Regex.Matches(s, @"\p{L}{2,}")) { 
    // match.Index, match.Value, etc.. 
} 
+1

'@ "\ p {L} {1,}"'로 변경하면'd '가 나타나거나'@ "\ w +"' 단어를 선택하십시오. – John

-1

당신은 아마 이외의 문자를 필터링 단어

 String sourcestring = "-dog--cat--d--"; 
     Regex re = new Regex(@"\w+"); 
     MatchCollection mc = re.Matches(sourcestring); 
     int mIdx=0; 
     foreach (Match m in mc) 
     { 
     for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++) 
      { 
      Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value); 
      } 
     mIdx++; 
     } 
+0

''System.Text.RegularExpressions.Match' 클래스를 사용하여 downvote에 대해 각 단어의 첫 번째 및 마지막 색인을 알고 싶습니다. –

+0

@LB 감사합니다. 단어를 필터링하고 색인과 같은 정보를 얻으십시오 ... – John