[MATLAB] 숫자와 문자의 조합으로 구성된 문자열에서 숫자와 문자를 각각 추출하려면? (질문에 대한 답변)

코딩/matlab|2020. 5. 22. 11:50

728x90

예전에 작성한 글인 "[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' 으로 바꿔서 코드를 실행해보겠습니다.  

 

 

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

  1. 김민규 2020.10.08 22:52 댓글주소  수정/삭제  댓글쓰기

    글 잘읽었습니다 감사합니다!
    혹시 매트랩 함수 중에 문자열 내에서 n 번째 자리 문자를 반환하는 함수가 있을까요?
    ex ) 문자열 "가나다라마바사" 4번째 문자 반환 --> "라"

    • BlogIcon b스카이비전 2020.10.09 05:06 신고 댓글주소  수정/삭제

      x = '가나다라마바사'
      x(4)

      와 같이 단순히 인덱싱의 방법으로 해결할 수 있습니다.^^ 만약 문자열이 char 클래스가 아니라 string 클래스면, 먼저 char 클래스로 변환시킨 다음에 인덱싱 방법을 해주면 됩니다.

      x = "가나다라마바사"
      x = char(x)
      x(4)