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

本文关键字:保留 单词 文本 | 更新日期: 2024-11-08 16:20:30

我有以下文字:

测试一些文本。现在这里有一些新的长篇大

论文本

我需要将其剪切成 50 个字符,但不剪切单词。因此,期望的结果是:

测试一些文本。现在这里有一些新的...

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

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

比赛:

测试一些文本。现在这里有一些新的

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


在我的真实案例中,我有一个名为 [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}) .*", "$1...");

所以寻找^(?=.{50,})(.{0,50}) .*并用$1...替换它

解释。。。您正在寻找长度至少为 50 个字符的文本,因为较短的文本不需要缩短,所以(?=.{50,})(但请注意,这不会捕获任何内容)。然后你寻找前0...50个字符(.{0,50}),后跟一个空格,后跟其他任何$1。您将用前 0...50 个字符 ( ... ) 替换所有这些字符,后跟 (?=.{50,})

我需要Test test,因为否则正则表达式会用CC_12替换Test...,从第一个空格替换。