我有以下文字:
测试一些文字。现在这里有一些新的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);
}
这就是我想用正则表达式替换函数的原因。
答案 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...
,从第一个空格替换。