将文本剪切到特定长度以保留单词
本文关键字:保留 单词 文本 | 更新日期: 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...
,从第一个空格替换。