정규표현식(RegExp) - 문자와 숫자가 아닌 기호 모두 변경하기 + 기초

반응형

 

이 포스팅은 정규 표현식에 대한 전반적인 설명을 다르지 않고

문자와 숫자가 아닐 경우의 특수 기호를 찾아 변경하는 것을 목표로 합니다.

이러한 경우는 특히나 파일명을 지정할 때에 많이 사용되는데,

중복이 없도록 시계열 타입으로 밀리세컨드까지 표현하여 저장하게 됩니다.

파일명에 다음과 같은 (2023/07/21 09:00:0000) 문자가 들어오게 될 경우에는

슬래쉬 '/' 기호와 공백 ' '기호, 콜론':' 기호가 파일명으로 허용되지 않는 상황이 발생할 수 있습니다.

정규 표현식을 사용하게 되면 프로그램 내에서 파일명을 지정할 때 오류를 최소화할 수 있습니다.


정규 표현식

  • 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용하는 형식 언어
  • 즉, 문자열을 다룰 때 일정한 패턴을 표현하기 위함
  • 보통 정규 표현식을 RegEx 혹은 RegExp로 부르며 많이 사용
  • 많은 텍스트 편집기와 프로그래밍 언어에서 문자열의 검색과 치환을 위해 지원
    • 내장되어 있는 언어 : 펄, 자바스크립트, 루비, Tcl 등
    • 표준 라이브러리를 통해 제공되는 언어 : 닷넷 계열 언어, 자바, 파이썬, POSIX C, C++ 등

정규 표현식 패턴으로 문자와 숫자가 아닌 기호 찾기

이 포스팅은 Dart 언어를 기준으로 작성되었습니다.

정규 표현식 표현 방법은 어느 언어든 많이 다르지 않습니다.

 

설명

RegExp(r'[^\w]')
  • r' 혹은 r" : 문자열을 raw string으로 지정하라는 의미. 이는 백슬래시 '\'를 그대로 표현할 수 있도록 해줌
    • 지원되는 언어마다 다르지만 r' 를 사용하게되면 백슬래시를 그대로 표현하기 때문에 현재 예시에서 사용되는 '\w'(특수 기호 모두 찾기)의 경우 백슬래시를 두번 사용하여 표현해야 할 수도 있습니다. (r'\\w)
  • ^ : 문자열의 시작을 의미
    • 반대로 '$' 기호는 문자열의 종료를 의미
  • \w : 문자와 숫자가 아닌 문자열 패턴을 찾는다는 것을 의미

 

사용 예시

  • 현재 시간 정보를 변수에 저장하여 print문을 통해 콘솔에 출력
  // 현재 시간
  var currentTime = DateTime.now();
  // 현재 시간 출력
  print('DateTime : now\n ===>>> $currentTime');
  // 현재 시간을 문자와 숫자 기호를 제외한 문자 존재 시 언더스코어(_)로 변경하여 출력
  print(
      'Current Time String Fix : apply regexp to replace\n ===>>> ${currentTime.toLocal().toString().replaceAll(RegExp(r'[^\w]'), '_')}');

 

  • 출력 결과
    • 하이픈 '-', 콜론 ':', 점 '.', 공백 ' '이 모두 언더스코어 '_' 로 변경되어 출력
I/flutter (22783): DateTime : now
I/flutter (22783):  ===>>> 2023-07-21 00:51:50.114846
I/flutter (22783): Current Time String Fix : apply regexp to replace
I/flutter (22783):  ===>>> 2023_07_21_00_51_50_114846

그 외 패턴

  • \b : 문자와 공백 사이를 의미
  • \c : 제어 문자를 의미
  • \d : 숫자에 해당하는 유니코드 대응. [0-9[와 달리 아랍 문자, 페르시아 문자 등 다양한 문자 포괄
  • \f : 폼 피드
  • \n : 개행 문자 (줄바꿈)
  • \s : 공백 문자
  • \t : 탭 문자
  • \v : 수직 탭
  • \x : 16진수 값
  • \0 : (숫자 0) 8진수 값

참고

반응형