将文本剪切到特定长度并保留单词
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.
开始替换
我有以下文字:
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.