2014-01-16 4 views
2

저는이 문제에 대해 열심히 생각해 왔지만 현재의 지식으로는 해결책을 찾을 수 없습니다.정확하게 대문자로 된 단어를 검색하십시오.

정확하게 문장이있는 단어를 감지하려고합니다. 예를 들어 2를 대문자로두고 나머지는 소문자로 표시합니다.

그래서 HEllo, HellO 또는 hello는 일치하지만 Hello 또는 HEllo는 일치하지 않습니다.

+0

RegEx 대신 간단한 for 루프를 사용합니다. – thefourtheye

답변

3

에 대해 작동 또는 전자 3 자에 대해 동일합니다. 패턴 수의 정수를 원하는 수로 변경할 수 있습니다.

 string strTester = "AaaaAA"; 

     var results = System.Text.RegularExpressions.Regex.Matches(strTester,"(.*[A-Z]{1}.*){3,}"); 
     var occuranceCount = results.Count; 

     if (occuranceCount >= 1) { 
      Console.WriteLine("true"); 
     } 
     else { 
      Console.WriteLine("false"); 
     } 
+1

내 특별한 방식으로 작성하는 생각하지 않았다, 내 특정 요구 ('.' 너무 컸다) modyfing 후, 그것은 트릭을 않았다. thefourtheye의 솔루션도 잘 작동했지만 패턴 길이가 너무 길어지는 경우도있었습니다. 그리고 regex 선택은 내가 잠시 동안 더 잘 해나 가기 위해 노력했기 때문에 대부분 해결할 수있는 많은 서로 다른 일치하는 문제가있는 프로젝트를 얻었 기 때문입니다. –

+0

도움이 되니 기쁩니다! 나는 또한 RegEx를 좋아하는데, 조금 오래된 학교입니다. 데이터 유효성 검사를 위해 여전히 강력합니다. 나는 람다 물건이 꽤 멋지다는 것에 주목해야한다. 나는 조금 더 .net에 조금 뒤떨어져있다. –

2

이 정규식은 문자열, 경기는 0 개 이상의 소문자, 다음 첫 번째 대문자의 시작 부분에서

^[a-z]*[A-Z][a-z]*[A-Z][a-z]*$ 

작동하고 0 개 이상의 소문자 다음 두 번째 대문자와 것 0 개 이상의 소문자.

4

정규식을 사용하지 않고도이 작업을 수행 할 수 있으며 Lambda를 사용하면 꽤 잘 읽습니다.

string sentence = "This IS a SEntence"; 

var wordCount = sentence.Split(new char[] { ' ' }) 
    .Where(word => word.Count(letter => char.IsUpper(letter)) == 2) 
    .Count(); 

Console.WriteLine(wordCount); 
Console.ReadKey(); 

출력 :

2

+1

내가이 현대적인 코딩 물건을 배울 필요가 :) –

1

는 개인적으로 내가 Char.IsUpperSystem.Linq의 조합이 더 우아하고 유지 보수 솔루션을 가능하게 할 것이다라고 생각 - 또한

public static class Word 
{ 
    public static bool HasUppercaseLetter(string word, int howManyUpper = 1) 
    { 
     return word.Count(char.IsUpper) == howManyUpper; 
    } 

    public static int HowManyWordsHaveUppercaseLetters(string sentence, 
     int howManyUpper = 1) 
    { 
     var words = sentence.Split(new[] {' '}); 
     return words.Count(w => HasUppercaseLetter(w, howManyUpper)); 
    } 
} 

을, 여기에 몇 가지 단위 테스트가 있습니다. 당신이 정규식 : 여기

를 원하는 경우 상기 기능, 샘플 입력

[TestFixture] 
public class WordTests 
{ 
    [TestCase("HellO", Result = true)] 
    [TestCase("heLLo", Result = true)] 
    [TestCase("HEllO", Result = false)] 
    [TestCase("Hello,", Result = false)] 
    public bool HasTwoUppercaseLetters(string word) 
    { 
     return Word.HasUppercaseLetter(word, 2); 
    } 

    [Test] 
    public void HasTwoWordsWithTwoUppercaseLetters() 
    { 
     // Inpsired by Erik Philips 
     Assert.True(
      Word.HowManyWordsHaveUpperCaseLetters("This IS a SEntence", 2) == 2); 
    } 
} 
관련 문제