powered by simpleCommunicator - 2.0.57     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Регулярное выражение: поиск текста в строке и замена разделителем
11 сообщений из 11, страница 1 из 1
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122584
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помогите решить следующую задачу.

На странице сайта есть блок div с текстовой строкой, которая выводится из БД. Ширина этого дива примерно равняется в 30 символов текста определенного размера. Эта строка представляет собой полное имя владельца аккаунта интернет-магазина.

Проблема в том, что этот div ни в коем случае не должен разъезжаться больше, чем допустимо (в данном случае на 30 символов текста).

Но в поле таблицы, где хранится это полное имя владельца аккаунта, возможна длина текста составляет 256 символов!

И вот представьте, имя владельца аккаунта состоит из 256 символов одной сплошной неразрывной строкой! Ни единого пробела.

Это означает, что в браузере блок div растянется до невозможности по горизонтали.

Так вот, как вставить пробелы в такую строку через каждые 30 неразрывно следуемых символов?
То-есть, если встретили в строке 30 и более подряд идущих символов без пробела, тогда между 30-м и 31-м символом вставляем пробел.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122585
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл сказать, регулярные выражения для c#.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122602
фиганыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avolik,

Код: c#
1.
2.
3.
StringBuilder b = new StringBuilder();
Regex.Split("То чего нужно подробить", "(.{30})").Where(a=> !string.IsNullOrEmpty(a)).ToList().ForEach(a=> b.AppendLine(a));
Результат = b.ToString();
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122604
фиганыч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avolik,

пробел забыл вставить
Код: c#
1.
2.
3.
StringBuilder b = new StringBuilder();
Regex.Split("То чего нужно подробить", "(.{30})").Where(a=> !string.IsNullOrEmpty(a)).ToList().ForEach(a=> b.AppendLine(a + " "));
Результат = b.ToString().TrimEnd(' ');
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122652
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
фиганыч,
Код: c#
1.
string output = string.Join(" ", Regex.Split("То чего нужно подробить", "(.{30})" ).Where(s => s != ""));
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38122658
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avolik, Вы задачу через одно место решаете. Зачем данные подгонять под представление?
Задайте максимальную ширину дива:
Код: css
1.
div#profile-owner-name { max-width: 200px; overflow: hidden; }
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38123074
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, знал, что будет такое предложение :)

Нет, это точно не подходит ибо даже настроенный внешний вид скролбара там не спасет. Надо именно перенести по словам и четко влезть в заданную изначально ширину div-а.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38123817
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, работает классно, даже слишком :(

Дело в том, что строка, содержащая пробелы чаще, чем на 30 символов, все равно разбивается дополнительными пробелами.
Всё-равно, после каждого 30-го символа добавляется пробел.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38124049
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил сам посредством некрасивого, но рабочего кода:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
    protected string DroblenieDlinnyhStrok(string input, int maxLength)
    {       
        // 1. Разбиваем строку на слова через пробел
        string[] splitString = input.Split(' ');

        // 2. Если элемент один, значит надо вставить сразу через каждые maxLength символов пробел
        if(splitString.Length == 1)
            return string.Join(" ", System.Text.RegularExpressions.Regex.Split(input, "(.{" + maxLength + "})").Where(s => s != ""));

        // 3. Перебираем элементы массива и, если некоторый элемент длиннее maxLength значения, тогда вставляем в него пробел
        for (int i = 0; i < splitString.Length; i ++ )
        {
            if (splitString[i].Length > maxLength)
                splitString[i] = string.Join(" ", System.Text.RegularExpressions.Regex.Split(splitString[i], "(.{" + maxLength + "})").Where(s => s != ""));
        }

        return string.Join(" ", splitString);
    }


Если кто предложит более изящную версию, буду очень признателен.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38124185
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
avolik, пункт 2 у Вас лишний.
...
Рейтинг: 0 / 0
Регулярное выражение: поиск текста в строке и замена разделителем
    #38126391
avolik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA, вообще то да. Но тогда даже имея один элемент массива потребуется вызывать итерацию для него. Но в общем да, 2-й пункт лишний.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Регулярное выражение: поиск текста в строке и замена разделителем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]