c # Лучший способ разбить длинную строку - PullRequest
4 голосов
/ 23 апреля 2011

Этот вопрос не относится к:

Лучший способ разбить длинные строки в исходном коде C #

Что касается источника, то есть обработки длинных выходных данных.Если кто-то входит:

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

В качестве комментария, он ломает контейнер и делает всю страницу действительно широкой.Есть ли какое-нибудь умное регулярное выражение, которое может сказать, определить максимальную длину слова в 20 символов, а затем ввести пробел?

Спасибо за любую помощь!

Ответы [ 3 ]

5 голосов
/ 23 апреля 2011

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

public static string Abbreviate(this string text, int length) {
    if (text.Length <= length) {
        return text;
    }

    char[] delimiters = new char[] { ' ', '.', ',', ':', ';' };
    int index = text.LastIndexOfAny(delimiters, length - 3);

    if (index > (length / 2)) {
        return text.Substring(0, index) + "...";
    }
    else {
        return text.Substring(0, length - 3) + "...";
    }
}

Если строка достаточно короткая, она возвращается как есть.В противном случае, если «граница слова» найдена во второй половине строки, она «изящно» обрезается в этой точке.Если нет, то он обрезается трудным путем чуть ниже необходимой длины.

Если строка обрезается вообще, к ней добавляется многоточие ("...").* Если вы ожидаете, что строка будет содержать конструкции, не относящиеся к естественному языку (например, URL), вам необходимо настроить это, чтобы обеспечить хорошее поведение при любых обстоятельствах.В этом случае работа с регулярным выражением может быть лучше.

3 голосов
/ 23 апреля 2011

Вы можете попробовать использовать регулярное выражение, которое использует положительный прогноз, например:

string outputStr = Regex.Replace(inputStr, @"([\S]{20}(?=\S+))", "$1\n");

Это должно «вставить» разрыв строки во все слова длиной более 20 символов.

3 голосов
/ 23 апреля 2011

Да, вы можете использовать это одно регулярное выражение

string pattern = @"^([\w]{1,20})$";

это регулярное выражение позволяет вводить не более 20 символов

string strRegex = @"^([\w]{1,20})$";
string strTargetString = @"asdfasfasfasdffffff";

if(Regex.IsMatch(strTargetString, strRegex))
{
    //do something
}

Если вам нужно только ограничение длины, вы должны использовать это регулярное выражение

^(.{1,20})$

, поскольку \ w соответствует буквенно-цифровому символу и символу подчеркивания

...