将文本剪切为保留单词的特定长度

时间:2015-03-10 13:55:36

标签: c# regex tsql sql-server-2012 clr

我有以下文字:

  

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

我需要将其剪切为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);
        }

这就是我想用正则表达式替换函数的原因。

1 个答案:

答案 0 :(得分:2)

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

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}),后跟空格,然后查找其他任何内容.*。您将使用前0到50个字符($1)后跟...

替换所有这些内容

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