请注意,字符串
我有一个大的文本数组(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个字符。