C #: Как я могу вернуть только первый набор слов заглавных букв из строки? - PullRequest
0 голосов
/ 02 ноября 2018

Если бы я хотел разобрать строку, чтобы вернуть только первые все заглавные слова в ней, как бы я это сделал?

Пример:

"OTHER COMMENTS These are other comments that would be here. Some more
comments"

Я хочу просто вернуть "OTHER COMMENTS"

  • Эти первые слова в верхнем регистре могут быть много, и точное количество неизвестно.
  • В строке могут быть другие слова после всех заглавных букв что я просто хочу игнорировать.

Ответы [ 4 ]

0 голосов
/ 03 ноября 2018

Вы также можете использовать Regex:

using System.Text.RegularExpressions;
...
// The Regex pattern is any number of capitalized letter followed by a non-word character.
// You may have to adjust this a bit.
Regex r = new Regex(@"([A-Z]+\W)+"); 
string s = "OTHER COMMENTS These are other comments that would be here. Some more comments";
MatchCollection m = r.Matches(s);
// Only return the first match if there are any matches.
if (m.Count > 0)
{
    Console.WriteLine(r.Matches(s)[0]);
}
0 голосов
/ 02 ноября 2018
var input = "OTHER COMMENTS These are other comments that would be here. Some more comments";
var output = String.Join(" ", input.Split(' ').TakeWhile(w => w.ToUpper() == w));

Разделите его на слова, затем возьмите слова, в то время как заглавная версия слова совпадает со словом. Затем объедините их обратно с пробелом.

0 голосов
/ 02 ноября 2018

Вы можете использовать комбинацию Split (чтобы разбить предложение на слова), SkipWhile (чтобы пропустить слова, которые не все прописные), ToUpper (для проверки слова на соответствие заглавной буквы ) и TakeWhile (чтобы взять все последовательные слова в верхнем регистре, если они найдены). Наконец, эти слова могут быть объединены с помощью Join:

string words = "OTHER COMMENTS These are other comments that would be here. " + 
    "Some more comments";

string capitalWords = string.Join(" ", words
    .Split()
    .SkipWhile(word => word != word.ToUpper())
    .TakeWhile(word => word == word.ToUpper()));
0 голосов
/ 02 ноября 2018

Вы можете перебирать строку как массив символов. Чтобы проверить, является ли символ заглавными, используйте Char.IsUpper https://www.dotnetperls.com/char-islower. Итак, в цикле вы можете сказать, является ли он символом - установить флаг, который мы начали читать. Затем добавьте этот символ в коллекцию символов. Продолжайте цикл, и когда он перестанет быть символом верхнего регистра, а флаг все еще имеет значение true, вырвитесь из цикла. Затем верните коллекцию символов в виде строки.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...