matlab

애증의 정규식... 3탄

게으른 the lazy 2024. 8. 22. 21:52

 

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

 

애증의 정규식 1탄

애증의 정규식 2탄

 


 

게으른 매트랩 인덱싱 파트를 쓰던 도중, 애증의 정규식 1탄에서 걱정했던 일이 발생했다. 마크다운에서 헤딩 텍스트에 한글이 들어가면 링크에서는 없애야 한다. 정확히는,

 

1. 숫자와 알파벳, 즉 alphanumeric는 그대로 남긴다.

2. 그 외의 문자는, alphanumeric 사이에 있는 것들은 묶어서 하이픈 하나로 바꾼다.

3. Trailing 하이픈은 모두 없애버린다.

 

이게 말로 하면 좀 어려운데, 쉽게 말해 아래처럼 바꾼다.

 

123가나다abc → 123-abc

1가2나3다 → 1-2-3

가나다a123bc → a123bc

 

즉, 남길 문자 사이에 non-alphanumeric이 몇 개 있든 하이픈 하나로 바꾸고, 맨 앞과 맨 뒤의 하이픈은 모두 없애야 한다.

 


 

챗gpt에게 순서대로 물어봤다.

 

1. 숫자와 알파벳 외에 모두 하이픈으로 바꾸려면 어떻게 해야 해?

str = 'Hello, World! 123';
newStr = regexprep(str, '[^a-zA-Z0-9]', '-');
disp(newStr);

 

2. Trailing 하이픈을 모두 없애고 싶어.

str = 'Hello-World---';
newStr = regexprep(str, '-+$', '');
disp(newStr);

 

여기서,

• +는 하이픈 1개 이상을 말한다.

• $는 그걸로 끝나는 패턴을 말한다.

 

이렇게 하고 나니 연속된 하이픈을 바꾸는 것은 아래처럼 하면 되겠다 싶어서 그대로 응용했다.

str = 'Hello-World---';
newStr = regexprep(str, '-+', '-');
disp(newStr);

 

잘 된다.

 


 

여기까지 하고 나니, 어쩌면 이 모든 것을 한번에 할 수도 있을까 싶었다. 물어봤다.

 

 

 

이해를 포기했다.