matlab:截断大文本并附加“...”

matlab: truncate large text and append '...'

我有大量文本(text,存储为 cell-array),我想在 matlab 中将其截断,比如 5 个字符。用 regexprep 截断是非常有效的,但现在,我想在每个截断匹配的末尾附加一个 '...' (并且 只有 )。

(如何)在 MATLAB 的 regexprep 中实现?

>> text = {'123456780','1','12'}; %<- small representative sample
>> regexprep(text,'(^.{0,5})(.*)','') %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}).+','...')

参见regex demo

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

请注意,regexprep returns 如果未找到正则表达式匹配项,输入字符串将保持原样,因此您无需担心长度为零到五个字符的字符串。

详情:

  • ^ - 字符串开头
  • (.{5}) - 捕获组 1 (</code>):任意五个字符</li> <li><code>.+ - 任何一个或多个字符,尽可能多。

请注意,字符串 12345... 实际上是 8 个字符长。您不想犯将 1234567 截断为 12345... 的错误,因为截断后的版本更长,因此一开始就不应该截断。

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

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

仅当超过 8 个字符时才会截断,如果超过 8 个字符,将显示前 5 个字符并带有尾随省略号。