C# 用于查找未中断文本并插入空格的正则表达式

C# 用于查找未中断文本并插入空格的正则表达式,c#,asp.net-mvc,regex,C#,Asp.net Mvc,Regex,我正在建立一个论坛,目前正在测试阶段。用户已经开始利用某些东西,比如发布没有空格的长文本字符串,这会拉伸屏幕并破坏一些样式。我刚开始使用这段代码,它工作得很好 int charIndex = 0; int noSpaceCount = 0; foreach (char c in text.ToCharArray()) { if (c != ' ') noSpaceCount++

我正在建立一个论坛,目前正在测试阶段。用户已经开始利用某些东西,比如发布没有空格的长文本字符串,这会拉伸屏幕并破坏一些样式。我刚开始使用这段代码,它工作得很好

        int charIndex = 0;
        int noSpaceCount = 0;
        foreach (char c in text.ToCharArray())
        {
            if (c != ' ')
                noSpaceCount++;
            else
                noSpaceCount = 0;

            if (noSpaceCount > 150)
            {
                text = text.Insert(charIndex, " ");
                noSpaceCount = 0;
            }
            charIndex++;
        }
这段代码可以工作,但如果可能的话,我更喜欢正则表达式。问题是,我将使用正则表达式来识别链接,我不想用空格打断长链接,因为这些将通过使链接显示文本缩写来修复。因此,我不想在一段标识为URL的文本中插入空格,但我确实希望每150个字符插入一个空格,该空格是连续的、非链接的文本


有什么建议吗?

这太复杂了。感谢Eric和同事提供了很棒的.NET正则表达式库

resultString = Regex.Replace(subjectString, 
    @"(?<=     # Assert that the current position follows...
     \s        # a whitespace character
     |         # or
     ^         # the start of the string
     |         # or
     \G        # the end of the previous match.
    )          # End of lookbehind assertion
    (?!(?:ht|f)tps?://|www\.)  # Assert that we're not at the start of a URL.
    (\S{150})  # Match 150 characters, capture them.", 
    "$1 ", RegexOptions.IgnorePatternWhitespace);
resultString=Regex.Replace(subjectString,

@“(?将
”([^]{150})
”全局替换为
“\1”
(根据您的正则表达式风格进行修改)

这似乎是修复布局问题的一个非常糟糕的解决方案。你不能添加word wrap吗?word wrap,或
overflow:hidden
。word wrap仅适用于静态大小的元素。它不适用于允许占据屏幕宽度的div。它只会拉伸该div以适应内容。如何识别URL?W它是从http(s)/ftp(s)://
开始的,还是用http(s)/ftp(s)://或www开始的?理想情况下,它是从http(s)/ftp(s)://或www开始的。谢谢!现在就测试它。呜呜!我非常尊重你的regex大师。我希望我能接受这个答案两次。