2014-06-05 2 views
3

나는 당신이 나의 것 같은 많은 질문을 보았다는 것을 알고있다. 그러나 나는 내 것이 조금 다르기를 바란다. 내가 통역을 그리고 난 문장으로 텍스트를 분리하고 싶어하지만 나는이 코드를 작성한 경우 "." "?" "!" 문자열을 분리하고 구분 기호를 유지하는 방법은 무엇입니까?

public static string[] GetSentences(string Text) 
{ 
    if (Text.Contains(". ") || Text.Contains("? ") || Text.Contains("! ")) 
     return Text.Split(new string[] { ". ", "? ", "! " }, StringSplitOptions.RemoveEmptyEntries); 
    else 
     return new string[0]; 
} 

는 그것은, 제거. 어떻게 할 수 있는지 알려주고 싶습니다.


참고 : "." "?"나는

+0

그래서 당신은 배열의 구분 구분 기호를 저장할 ? – Mivaweb

+0

가능한 중복 [Regex.Split의 구분 기호를 유지하는 방법?] (http://stackoverflow.com/questions/15667927/how-to-keep-the-delimiters-of-regex-split) – Sadique

+0

delimeter를 원한다. 문장이있는 것 – user3260312

답변

16

간단한 ... 점과 공간, 물음표과 공간에 의해 분할 먼저 교체하고 싶습니다. 가독성을 위해 "|"을 사용 하겠지만 좀 더 이국적인 것을 사용하고 싶을 수도 있습니다.

// this part could be made a little smarter and more flexible.  
// So, just the basic idea: 
Text = Text.Replace(". ", ". |").Replace("? ", "? |").Replace("! ", "! |"); 

if (Text.Contains("|")) 
    return Text.Split('|', StringSplitOptions.RemoveEmptyEntries); 

나는 이상한 것처럼 보이는 else return new string[0];에 대해 궁금합니다. 리턴 문자열에 입력 문자열을 넣을 구분 기호가없는 경우 if/else 구문 만 제거해야한다고 가정합니다.

+1

감사합니다. 그게 나를 도왔다. – user3260312

2

정규식 방법 :

return Regex.Split(Text, @"(?<=[.?!])\s+"); 

그래서 당신은 ., ?! 중 하나가 앞에 빈 공간으로 문자열을 분할합니다.

(?<=[.?!])\s+ 

Regular expression visualization

Demo

관련 문제