MATLAB:截断大文本并附加"..."



我有一个大的文本数组(text,存储为cell-array(,我想在matlab中截断它,比如说5个字符。使用regexprep进行截断是非常有效的,但现在,我希望在每个截断的匹配的末尾添加一个'...'(并且只有(。

(如何(在MATLAB的regexprep中实现这一点?

>> text = {'123456780','1','12'}; %<- small representative sample
>> regexprep(text,'(^.{0,5})(.*)','$1') %capture first 5 characters or less in first group (and replace the text with first group captures)
ans =
1×3 cell array
{'12345'}    {'1'}    {'12'}

应该读取:

ans =
1×3 cell array
{'12345...'}    {'1'}    {'12'}

您需要使用

regexprep(text,'^(.{5}).+','$1...')

请参阅regex演示。

要点是,只有当字符串的长度超过五个字符时,才需要触发替换(否则,甚至不需要截断字符串(。

请注意,如果没有找到正则表达式匹配,regexprep将按原样返回输入字符串,因此您不必担心长度为零到五个字符的字符串。

详细信息

  • ^-字符串的开头
  • (.{5})-捕获组1($1(:任意五个字符
  • .+-任意一个或多个字符,尽可能多
请注意,字符串12345...实际上有8个字符长。您不想犯将1234567截断为12345...的错误,因为截断的版本更长,因此不应该首先截断。

考虑到这一点的解决方案是:

regexprep(text,'^(.{5}).{3}.+','$1...')

只有在超过8个字符时才会截断,如果是,则会显示带有尾部省略号的前5个字符。

最新更新