How to take first three characters of string

10 次查看(过去 30 天)
Hi,
I have the below cell array:
MA0K123T0
MB0JHY210I9
AoTkU08
880KE21L
PMB456KU0
standard
MF0KET9
twist
MA0KL3
PMV09K
Now I want to filter as below:
If the name start with M or P, then take the first three characters otherwise keep original name. My output should be:
MA0
MB0
AoTkU08
880KE21L
PMB
standard
MF0
twist
MA0
PMV

采纳的回答

Azzi Abdelmalek
Azzi Abdelmalek 2016-5-23
编辑:Azzi Abdelmalek 2016-5-23
str={'MA0K123T0'
'MB0JHY210I9'
'AoTkU08'
'880KE21L'
'PMB456KU0'}
out=cellfun(@(x) regexprep(x,'\<(M|P).+',x(1:3)),str,'un',0)
  7 个评论
Azzi Abdelmalek
Azzi Abdelmalek 2016-5-24
This doesn't give the expected result (look at the new question in the hidden comment)
Azzi Abdelmalek
Azzi Abdelmalek 2016-5-24
We can use dynamic expressions
match_expr = '(M|P)([a-zA-Z]?)([a-zA-Z]?)(.+)'
replace_expr='$1$2$3'
regexprep(str, match_expr, replace_expr)

请先登录,再进行评论。

更多回答(1 个)

Guillaume
Guillaume 2016-5-23
编辑:Guillaume 2016-5-24
Azzi's answer with to regex call seems unnecessarily complicated to me. The cellfun is also not required. This simple regex will do:
str = {'MA0K123T0'
'MB0JHY210I9'
'AoTkU08'
'880KE21L'
'PMB456KU0'}
out = regexp(str, '^[MP].{2}|.*', 'match', 'once')
Which basically says match M or P (the [MP]) at the beginning of the string (the ^) followed by any two characters (the .{2}) and if that does not match, match everything (the &#124.*)
edit for your updated question:
out = regexp(str, '^[MP][A-Za-z]?[A-Za-z]?|.*', 'match', 'once')

类别

Help CenterFile Exchange 中查找有关 Cell Arrays 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by