将文本剪切到特定长度并保留单词

Cutting text to specific length preserving the words

我有以下文字:

Test some text. Now here is some new realylonglonglong text

而且我需要将它削减到 50 个字符,但不削减单词。所以,想要的结果是:

Test some text. Now here is some new ...

我正在寻找使用正则表达式替换的解决方案。以下正则表达式:

^.{0,50}(?= |$)

匹配项:

Test some text. Now here is some new

但我未能将其转换为用于替换功能。


在我的真实案例中,我有一个名为 [dbo].[RegexReplace] 的 SQL CLR 函数,我这样称呼它:

SELECT [dbo].[RegexReplace](@TEST, '^.{0,50}(?= |$)', '...')

它的 C# 定义是:

        public static string Replace(SqlString sqlInput, SqlString sqlPattern, SqlString sqlReplacement)
        {
            string input = (sqlInput.IsNull) ? string.Empty : sqlInput.Value;
            string pattern = (sqlPattern.IsNull) ? string.Empty : sqlPattern.Value;
            string replacement = (sqlReplacement.IsNull) ? string.Empty : sqlReplacement.Value;
            return Regex.Replace(input, pattern, replacement);
        }

这就是为什么我想用正则表达式替换函数。

这是你想要的正则表达式:

string result = Regex.Replace("Test some text. Now here is some new realylonglonglong text", "(?=.{50,})(^.{0,50}) .*", "...");

所以寻找 ^(?=.{50,})(.{0,50}) .* 并将其替换为 ...

说明...您正在寻找长度至少为 50 个字符的文本,因为较短的文本不需要缩短,所以 (?=.{50,})(但请注意,这不会捕获任何内容)。然后您查找前 0...50 个字符 (.{0,50}),然后是 space </code>,然后是任何其他字符 <code>.*。您将用前 0...50 个字符 (</code>) 替换所有这些,然后是 <code>...

我需要 (?=.{50,}),否则正则表达式会将 Test test 替换为 Test...,从第一个 space.

开始替换