C# проверяет, содержит ли вход только строчные буквы az

Я застрял на задаче, пытаясь напечатать слова, которые содержат только строчные буквы az. Я уже удалил введенную строку, если она содержит любое число 0-9 и если она содержит заглавную букву:

    String[] textParts;
    textParts = text.Split(delimChars);
    for (int i = 0; i < textParts.Length; i++)  //adds s to words list and checks for capitals
    {
        String s = textParts[i];
        bool valid = true;

        foreach (char c in textParts[i])
        {
            if (char.IsUpper(c))
            {
                valid = false;
                break;
            }

            if (c >= '0' && c <= '9')
            {
                valid = false;
                break;
            }

            if (char.IsPunctuation(c))
            {
                valid = false;
                break;
            }

        }
        if (valid) pageIn.words.Add(s);

Это мой код до сих пор. Последняя часть, которую я пытаюсь проверить, чтобы увидеть, содержит ли слово пунктуацию (она не работает), есть ли более простой способ сделать это и как заставить работать последнюю часть моего кода?

PS Я не очень доволен использованием Regex.

Большое спасибо, Элли

3 ответа

Без регулярного выражения вы можете использовать LINQ (может быть менее производительным)

bool isOnlyLower = s.Count(c => Char.IsLower(c)) == s.Length;

Count получит количество символов, которые находятся ниже в следующей строке. Если она соответствует длине строки, строка состоит только из строчных букв.

var regex = new Regex("^[a-z]+$");
if (!regex.IsMatch(input))
{
            // is't not only lower case letters, remove input
}

Я не уверен, правильно ли я понял ваш вопрос, но разве не должна работать следующая?

for (int i = 0; i < textParts.Length; i++)  //adds s to words list and checks for capitals
{
    String s = textParts[i];

    if(s.Equals(s.ToLower()))
    {
        // string is all lower
    }
}
Другие вопросы по тегам