저는이 문제에 대해 열심히 생각해 왔지만 현재의 지식으로는 해결책을 찾을 수 없습니다.정확하게 대문자로 된 단어를 검색하십시오.
정확하게 문장이있는 단어를 감지하려고합니다. 예를 들어 2를 대문자로두고 나머지는 소문자로 표시합니다.
그래서 HEllo, HellO 또는 hello는 일치하지만 Hello 또는 HEllo는 일치하지 않습니다.
저는이 문제에 대해 열심히 생각해 왔지만 현재의 지식으로는 해결책을 찾을 수 없습니다.정확하게 대문자로 된 단어를 검색하십시오.
정확하게 문장이있는 단어를 감지하려고합니다. 예를 들어 2를 대문자로두고 나머지는 소문자로 표시합니다.
그래서 HEllo, HellO 또는 hello는 일치하지만 Hello 또는 HEllo는 일치하지 않습니다.
에 대해 작동 또는 전자 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");
}
내 특별한 방식으로 작성하는 생각하지 않았다, 내 특정 요구 ('.' 너무 컸다) modyfing 후, 그것은 트릭을 않았다. thefourtheye의 솔루션도 잘 작동했지만 패턴 길이가 너무 길어지는 경우도있었습니다. 그리고 regex 선택은 내가 잠시 동안 더 잘 해나 가기 위해 노력했기 때문에 대부분 해결할 수있는 많은 서로 다른 일치하는 문제가있는 프로젝트를 얻었 기 때문입니다. –
도움이 되니 기쁩니다! 나는 또한 RegEx를 좋아하는데, 조금 오래된 학교입니다. 데이터 유효성 검사를 위해 여전히 강력합니다. 나는 람다 물건이 꽤 멋지다는 것에 주목해야한다. 나는 조금 더 .net에 조금 뒤떨어져있다. –
이 정규식은 문자열, 경기는 0 개 이상의 소문자, 다음 첫 번째 대문자의 시작 부분에서
^[a-z]*[A-Z][a-z]*[A-Z][a-z]*$
작동하고 0 개 이상의 소문자 다음 두 번째 대문자와 것 0 개 이상의 소문자.
정규식을 사용하지 않고도이 작업을 수행 할 수 있으며 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
내가이 현대적인 코딩 물건을 배울 필요가 :) –
는 개인적으로 내가 Char.IsUpper
과 System.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);
}
}
RegEx 대신 간단한 for 루프를 사용합니다. – thefourtheye