C#最佳的分割长字符串方法

4

这个问题与以下内容无关:

C#源代码中断长字符串的最佳方法

那个问题是关于源代码的,而这个问题是关于处理长输出的。如果有人输入:

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

作为评论,它会破坏包含容器使整个页面变得很宽。是否有任何聪明的正则表达式可以定义20个字符的最大单词长度,然后强制使用空格字符?

感谢任何帮助!

3个回答

5

在这种简单的情况下,可能没有必要涉及正则表达式。可以使用以下扩展方法:

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
你可以尝试使用正则表达式,其中包含一个正向预查,如下所示:
string outputStr = Regex.Replace(inputStr, @"([\S]{20}(?=\S+))", "$1\n");

这应该会在所有超过20个字符的单词中“插入”一个换行符。

3

是的,你可以使用这个正则表达式。

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

这个正则表达式允许输入不超过20个字符。
string strRegex = @"^([\w]{1,20})$";
string strTargetString = @"asdfasfasfasdffffff";

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

如果您只需要长度约束,那么可以使用以下正则表达式。
^(.{1,20})$

因为\w只匹配字母数字和下划线符号


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接