c#打破长串的最佳方式

时间:2011-04-23 15:59:46

标签: c# .net regex string substring

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

Best way to break long strings in C# source code

关于来源,这是关于处理长输出。如果有人进入:

  

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW

作为评论,它打破了容器并使整个页面变得非常宽。是否有任何聪明的正则表达式,可以说,定义最多20个字符的字长,然后强制一个空白字符?

感谢您的帮助!

3 个答案:

答案 0 :(得分:5)

可能没有必要让regex在这么简单的事情中使用。采用这种扩展方法:

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),则需要对其进行调整以确保在所有情况下都有良好的行为。在这种情况下,使用正则表达式可能更好。

答案 1 :(得分: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仅匹配 字母数字和下划线符号

答案 2 :(得分:3)

你可以尝试使用像这样使用正面预测的正则表达式:

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

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