Обработка списка после обьединения

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
Приветствую уважаемые форумчане!
подскажите новичку как реализовать такое:

Иметься список ключевых слов. В каждой строке по 3-5 слов(целые осмысленные приложения).
Все строки с маленькой буквы
Задача создать текстовый блок для сайта из 10-15 ключевых слов.

Создаю временный список из 10-15 слов и после операции "объединить элементы списка" со своим разделителем
Разделитель: .{-String.Space-}
ложу все в переменную

в переменной получается текстовый блок:
пример:
предложение 1. предложение 2. предложение 3. предложение 4. предложение 5. предложение N.

подскажите пжл как сделать чтобы:
1) Разделители после каждого предложения были разные.
Вот такие
.
,
:
!
-
и
или

2) Начало текстового блока всегда с большой буквы и если разделитель точка (.) или восклицательный (!) то следующее Предложение с большой буквы.

Пример того что нужно реализовать:
Предложение 1 и предложение 2. Предложение 3 - предложение 4. Предложение 5: предложение 6! Предложение 7, предложение 8 и тд

Знающее люди, кто подскажет - как это реализовать? Через регулярные выражения или как то еще? Можно ли без C#, без кода реализовать такое - даже если будет много блоков?
Заранее спс!
 
Последнее редактирование:

VerBin

Client
Регистрация
28.05.2016
Сообщения
555
Благодарностей
457
Баллы
63
Недавно писал подобный функционал для генерации на C#
Можно обойтись простыми блоками, но действий будет в 30 раз больше.
 

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
VerBin подскажите пжл:
нашел регулярку на форуме. Который делает то что нужно. Но она выполняет одно лишнее действие.

Вот задача этого рег выражения :
Подскажите регулярное выражение, для текста в в формате txt, разбитый по строкам. Нужно проставить точки, в конце предложений, там где их нет. И там где предложение начинается с маленькой буквы, сделать начальную букву заглавной.

Сам код:
Код:
string text = project.Variables["text"].Value; // переменная с текстом
Regex reg = new Regex(@"\.?\r\n");
text = reg.Replace(text, ".\r\n");
string[] s = Regex.Split(text, @"(?<=([\u2026\.\!\?]+\ )|\n)");
for (int i = 0; i < s.Length; i++)
{
    if (s[i].Length > 1)
        s[i] = s[i].Substring(0, 1).ToUpper() + s[i].Substring(1, s[i].Length - 1);
    else s[i] = s[i].ToUpper();
}
return string.Join("", s);
Код работает и все красиво получаеться. Но проставляет лишний знак (. ! ?). Они уже есть у меня в тексте случ. образом выбранные, после каждого предложения.
Что убрать из кода выше, чтобы он только выполнял вторую часть задачи? А именно: где предложение начинается с маленькой буквы, сделать начальную букву заглавной. Предложения могут начинаться после знаков ( . ! ? ). В Си вообще не разбираюсь пока.
 
Последнее редактирование:

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
VerBin подскажите пжл:
В Си вообще не разбираюсь пока.
Я тоже не разбираюсь особо, но рискну предположить , что достаточно просто убрать знак восклицания в этой строке
Код:
string[] s = Regex.Split(text, @"(?<=([\u2026\.\!\?]+\ )|\n)");
, чтобы было вот так
Код:
string[] s = Regex.Split(text, @"(?<=([\u2026\.\?]+\ )|\n)");
И должно вам быть счастье

Попробуйте. Вернуть то не трудно
 

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
к сожалению нет - все равно лишние знаки ставит
 

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
Попробуйте ещё так)
Посмотрите на результаты

Код:
string text = project.Variables["text"].Value; // переменная с текстом
Regex reg = new Regex(@"\.?\r\n");
text = reg.Replace(text, ".\r\n");
string[] s = Regex.Split(text, @"(?<=([\u2026\.\!\?]+\ )|\n)");
for (int i = 0; i < s.Length; i++)
{
    if (s[i].Length > 1)
        s[i] = s[i].Substring(0, 1).ToUpper();
    else s[i] = s[i].ToUpper();
}
return string.Join("", s);
 

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
S16er1um - Спс за помощь

Эксперементировал эти дни - но не хватает навыков в Cи.

сейчас попробовал Ваш код - видно делает все правильно - но выводит только первые буквы слов с большой буквы после знаков

Вот рез-т
С !С.С (Список наполнен словами: случайный ключ 1-2-3-n - поэтому буква С впереди все время (для теста временный список создал))

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

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
S16er1um - Спс за помощь
Эксперементировал эти дни - но не хватает навыков в Cи.
сейчас попробовал Ваш код - видно делает все правильно - но выводит только первые буквы слов с большой буквы после знаков
это не мой код))) это то, что вы кинули + я чисто следуя из побуждений логики и интуиции его отредачил)

Какой именно фрагмент кода вы заменили? киньте пожалуйста тот формат, который у вас сейчас работает и выводит буквы большие.

Короче, вы взяли это?

Код:
string text = project.Variables["text"].Value; // переменная с текстом
Regex reg = new Regex(@"\.?\r\n");
text = reg.Replace(text, ".\r\n");
string[] s = Regex.Split(text, @"(?<=([\u2026\.\!\?]+\ )|\n)");
for (int i = 0; i < s.Length; i++)
{
    if (s[i].Length > 1)
        s[i] = s[i].Substring(0, 1).ToUpper();
    else s[i] = s[i].ToUpper();
}
return string.Join("", s);
или это?
Код:
string[] s = Regex.Split(text, @"(?<=([\u2026\]+\ )|\n)");
или и то и другое использовали одновременно?
 

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
  1. Код:
    string text = project.Variables["text"].Value; // переменная с текстом
    Regex reg = new Regex(@"\.?\r\n");
    text = reg.Replace(text, ".\r\n");
    string[] s = Regex.Split(text, @"(?<=([\u2026\.\!\?]+\ )|\n)");
    for (int i = 0; i < s.Length; i++)
    {
        if (s[i].Length > 1)
            s[i] = s[i].Substring(0, 1).ToUpper();
        else s[i] = s[i].ToUpper();
    }
    return string.Join("", s);
    при этом коде - выводит только начальные Большие буквы. Сами предложения обрезает. Но зато не проставляет лишний знак препинания)))

    Одновременно не использовал.
    Пробывал отдельно

    Код:
    string[] s = Regex.Split(text, @"(?<=([\u2026\]+\ )|\n)");
    Предложения с маленькой буквы, лишний знак не проставляется. Но предложения с маленькой буквы после (. ! ?)
 
Последнее редактирование:

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
не, я потерялся вообще) нужна помощ уполномоченых людей!)
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
реплэйс после твоих знаков заменить на большую букву
 

garat

Client
Регистрация
18.07.2016
Сообщения
31
Благодарностей
15
Баллы
8
ssXXXss

text = reg.Replace(text, ".\r\n"); - в этой строке?
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)