티스토리 뷰

matlab

애증의 정규식... 4탄

게으른 the lazy 2024. 8. 31. 21:01

 

이 글은 정규식 삽질의 기록이며, 나중에 내가 같은 패턴을 쓸 일이 있을 때 찾아보기 위함이다.

 

애증의 정규식 1탄

애증의 정규식 2탄

애증의 정규식 3탄

 


 

과제 1. 마크다운 헤딩이 2단계일 때에도 잘 변환해야 한다.

- Heading level 1은 숫자가 안 들어가므로 추가해줘야 한다.

- 그 이하의 level은 숫자가 들어가므로 그대로 두어도 된다.

 

예시)

>[간단한 출력: disp]
>[포맷팅 출력: fprintf]
>>[2.1 formatSpec]
>>[2.2 변환 문자]
>>[2.3 이스케이프 문자]
>[format으로 출력 표시 형식 지정]

 

를 아래처럼 바꿔야 한다.

 

>[1. 간단한 출력: disp]
>[2. 포맷팅 출력: fprintf]
>>[2.1 formatSpec]
>>[2.2 변환 문자]
>>[2.3 이스케이프 문자]
>[3. format으로 출력 표시 형식 지정]

 

headings = regexp(txt, '>\[(.*?)\]', 'tokens');
numbering = 0;
for i = 1:length(headings)
    if isempty(regexp(headings{i}{1}, '^[0-9].[0-9]', 'once'))
        numbering = numbering + 1;
        txt = replace(txt, ...
            sprintf('>[%s]', headings{i}{1}), ...
            sprintf('>[%d. %s]', numbering, headings{i}{1}));
    end
end

 

* Heading level 1의 인덱스는 Heading level 2의 개수와 별도로 올라가야 함에 주의.

 


 

과제 2. 마크다운 바로가기 추가 수정

- 넘버링 내의 dot은 하이픈이 아니라 아예 없애야 한다.

- 대문자는 소문자로 바꾼다.

 

예시)

>[간단한 출력: disp](#updateTitle=...)
>[포맷팅 출력: fprintf](#updateTitle=...)
>>[2.1 formatSpec](#updateTitle=...)
>>[2.2 변환 문자](#updateTitle=...)
>>[2.3 이스케이프 문자](#updateTitle=...)
>[format으로 출력 표시 형식 지정](#updateTitle=...)

 

를 아래처럼 바꿔야 한다.

 

>[1. 간단한 출력: disp](#1-disp)
>[2. 포맷팅 출력: fprintf](#2-fprintf)
>>[2.1 formatSpec](#21-formatspec)
>>[2.2 변환 문자](#22)
>>[2.3 이스케이프 문자](#23)
>[3. format으로 출력 표시 형식 지정](#3-format)

 

% heading 다시 따고
headings = regexp(txt, '>\[(.*?)\]', 'tokens');
% alphanumeric만 남기고 전부 -로 바꿈
% alphanumeric 사이에는 - 하나만
% trailing -는 모두 없앰
% 넘버링 내의 dot은 모두 없앰 (첫번째 공백 이전의 모든 dot을 없앰)
% 알파벳은 모두 소문자로
for i = 1:length(headings)
    numbering = getfield(split(headings{i}{1}), {1});
    numbering = regexprep(numbering{1}, '\.$', '');
    newnumbering = replace(numbering, '.', '');
    headings{i}{1} = replace(headings{i}{1}, numbering, newnumbering);
    headings{i}{1} = regexprep(headings{i}{1}, '[^a-zA-Z0-9]', '-');
    headings{i}{1} = regexprep(headings{i}{1}, '-+', '-');
    headings{i}{1} = regexprep(headings{i}{1}, '-+$', '');
    headings{i}{1} = lower(headings{i}{1});
end

 


 

과제 3. 이미지 폴더명 일괄 변경

- 이미지 저장 폴더명을 fig_ch01_s01에서 fig_0101로 변경하고 싶었다.

 

d = dir('fig_*');

for i = 1:length(d)
    num = regexp(d(i).name, '[0-9]{2}', 'match');
    newname = sprintf('fig_%s%s', num{1}, num{2});
    movefile(d(i).name, newname)
end

 

 

 

 

 

'matlab' 카테고리의 다른 글

BPM 측정기 및 메트로놈  (0) 2024.09.10
애증의 정규식... 3탄  (0) 2024.08.22
hgtransform을 이용하여 이미지 회전시키기  (0) 2024.08.14
강아지 다이어트  (0) 2024.08.06
매트랩 콰인  (0) 2024.08.06
댓글