【问题标题】:matlab: truncate large text and append '...'matlab:截断大文本并附加“...”
【发布时间】:2021-08-02 05:56:38
【问题描述】:

我有大量文本(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'}

【问题讨论】:

  • 对不起,如果这是重复的,我搜索但找不到
  • 解决方案标记说明:对两个答案都投了赞成票,但选择了一个在回答问题的同时保留了大多数字符的答案

标签: regex matlab regexp-replace


【解决方案1】:

你需要使用

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

请参阅regex demo

主要的一点是你只需要在字符串超过五个字符时触发替换(否则,你甚至不需要截断字符串)。

请注意,regexprep 按原样返回输入字符串,就好像没有找到正则表达式匹配一样,因此您无需担心长度为 0 到 5 个字符的字符串。

详情

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 1970-01-01
      • 2013-07-17
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多