这个问题与以下内容无关:
Best way to break long strings in C# source code
关于来源,这是关于处理长输出。如果有人进入:
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
作为评论,它打破了容器并使整个页面变得非常宽。是否有任何聪明的正则表达式,可以说,定义最多20个字符的字长,然后强制一个空白字符?
感谢您的帮助!
答案 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个字符的单词中“插入”换行符。