Подскажите как грамотно обрезать строку

Регистрация
02.12.2014
Сообщения
31
Реакции
4
Баллы
8
У меня вот такой заголовок - Заправка картриджей Q2612A для HP LJ 1010, 1012, 1015
мне надо чтобы отрезало до 45 знаков, если это середина слова, то соответственно резало по последнему целому слову и если попадется в конце запятая, то чтобы ее откидывало и в конце ставило три точки
т.е. должно получиться - Заправка картриджей Q2612A для HP LJ 1010...
 
Обработка текста>Подстрока - от 0 до 45.
 
Подстрокой резаться будет..
 
можно вычислять в строке кол-во слов и делать обрезание не по кол-ву символов, а по кол-ву слов..
то есть составить регулярку, чтобы строка резалась на определенном пробеле по его номеру..
как то делал подобное, но сейчас не припомню именно как и в каком проекте.. :)
кажется именно по пробелам резал..

Код:
Развернуть Свернуть Копировать
    //кол-во слов = кол-во пробелов + 1
    
    var text = project.Variables["text"].Value.ToCharArray();
    int count = 1;
    foreach(var ch in text)
    {
        if(ch==' ')
        {
            count++;
        }
    }
    return count;
 
  • Оценить
Реакции: Dorian_Gray
можно вычислять в строке кол-во слов и делать обрезание не по кол-ву символов, а по кол-ву слов..
то есть составить регулярку, чтобы строка резалась на определенном пробеле по его номеру..
как то делал подобное, но сейчас не припомню именно как и в каком проекте.. :-)
кажется именно по пробелам резал..
Но пользователь просит по кол-ву символов обрезать - до 45.
 
Последнее редактирование:
Но ользователь просит по кол-ву символов обрезать - до 45.
да, я просто предложил альтернативу..
зная среднее кол-во слов в 45 символах, можно сделать такое упрощение и считать именно слова..

но это конечно не оч. красивое решение..
к тому же текст технический, с аббревиатурами и прочим..
 
да, я просто предложил альтернативу..
зная среднее кол-во слов в 45 символах, можно сделать такое упрощение и считать именно слова..

но это конечно не оч. красивое решение..
к тому же текст технический, с аббревиатурами и прочим..

PS:
гыы, я кажется вспомнил как я решал аналогичную задачу..
решение смешное, даже стыдно его тут рассказывать..
прогеры на C# и маститые регулярщики обсмеют.. :-)
 
Последнее редактирование:
Решение в студию)
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

- начинаем брать с удалением первую строку, складывать в другой промежуточный список
- объединять этот промежуточный список в переменную с пробелами и считать кол-во символов
- как только случился перебор по кол-ву символов, выходим из цикла, добавляем многоточие в конце..
 
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

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

Что то не до конца пойму как цикл сделать. А именно:
- 1. как складывать в другой промежуточный список?
- 2. объединять этот промежуточный список в переменную с пробелами и считать кол-во символов

Разобрался! Спасибо!
 
Последнее редактирование:
уже спрашивал как то (оч. давно) на этом форуме... подсказали регулярку: [\w\W]{1,45}(?=\ ) пользуюсь проблем небыло
 
перед циклом:

- строку, которую нужно обрезать кладем в список с разделителем "пробел"..

сам цикл:

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

Вот это подход! До такого еще додуматься нужно :)
А что, если после взятия последнего слова получилось не 45, а 50 символов? Удалять последнее? :)
Регулярка [\w\W]{1,45}(?=[\ \.,!\?]) куда проще с этим справляется :)
 
  • Оценить
Реакции: Rain
Вот это подход! До такого еще додуматься нужно :-)
А что, если после взятия последнего слова получилось не 45, а 50 символов? Удалять последнее? :-)
Регулярка [\w\W]{1,45}(?=[\ \.,!\?]) куда проще с этим справляется :-)
согласен, регулярка проще и эффективнее..
а по поводу что более 45 символов по моему методу, думаю это не так страшно, будет плюсом несколько знаков..
ну при необходимости можно мой метод модернизировать, чтобы после цикла регуляркой откусывать последнее слово в строке, получится менее 45 символов..

но, конечно же, если регулярка на руках - это не актуально.. :)
 
уже спрашивал как то (оч. давно) на этом форуме... подсказали регулярку: [\w\W]{1,45}(?=\ ) пользуюсь проблем небыло
Это решение подходит если в переменной от 45 символов. Если меньше, то режет последнее слово. Как быть, если одно слово и 10 символов, и чтобы не трогала это слово если оно меньше 45 символов?
 
Разобрался) Сделал так:
Считаю кол-во знаков в переменной. Если меньше 45, то не трогаю его. Если больше, использую переменную \w\W]{1,45}(?=\ ) , которая режет до 45 символов и потом ставлю в конце ...
 
Это решение подходит если в переменной от 45 символов. Если меньше, то режет последнее слово. Как быть, если одно слово и 10 символов, и чтобы не трогала это слово если оно меньше 45 символов?

Используюйте такую регулярку - [\w\W]{1,45}(?=[\ \.,!\?\r\n$])
Она похожа на то, что было выше, но немного улучшена.
 

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