2020-05-22 11:50:15

예전에 작성한 글인 "[MATLAB] 문자열에서 필요한 데이터만 추출하기, sscanf 함수"에 김진성님께서 질문을 남기셨는데 댓글로 설명하긴 조금 길어서 글을 하나 작성합니다. 

 

질문은 바로 이것이었습니다. 

 

"혹시 53423초보자4536 같은 숫자문자숫자 조합 데이터를 53423/초보자/4536 와 같이 숫자/문자/숫자로 나눌 수 있는 방법이 있을까요?"

 

질문을 요약하자면, 숫자와 문자의 조합으로 구성된 문자열에서 숫자와 문자를 각각 나눠서 추출하는 방법에 대한 질의입니다. 

 

이를 가능케 하는 코드를 작성해봤습니다. 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
clc, clear, close all
 
str = '53423초보자4536';
 
len = strlength(str);
 
TF = isstrprop(str'digit');
 
check = TF(1);
starts = [];
for i = 1:len
    if TF(i) ~= check
        starts = [starts, i];
        check = TF(i);
    end
end
 
ends = [starts - 1len];
 
ends_nums = size(ends, 2);
 
begin = 1;
for i = 1:ends_nums
    divided_str{i, 1= str(begin:ends(i));
    begin = 1 + ends(i);
end
cs

 

 

제대로 분리해서 추출해내는지 확인해보도록 하겠습니다. 

 

 

제대로 추출되었죠? 그러면 또다른 문자열에 대해서도 테스트해보겠습니다. 

 

이번에는 문자열을 '1저는23초보자456입니다78' 으로 바꿔서 코드를 실행해보겠습니다.  

 

 

역시 잘 되는 것을 확인할 수 있습니다. 김진성님께 도움이 되었으면 좋겠네요.^^