홍동이의 성장일기
[MySQL] RegexOne 정규표현식 Lesson 1 ~5 예제 풀이 및 설명 본문
안녕하세요👋
오늘은 정규표현식에 대해 이야기해 보겠습니다.
이번에 데이터리안 강의를 들으며 정규표현식을 배우게 되었는데요,
정규표현식을 학습할 수 있는 사이트가 영어로 되어있기도 하고 원하는 예시를 바로바로 찾아보기 힘들어서
복습 겸 정리하기 위해 글을 작성하게 되었습니다.
현직자 분들도 정규표현식을 외우기보다는 그때그때 찾아서 사용한다고 하시더라고요!
한 번만 잘 익혀놓으면 유용하게 사용할 수 있다고 하니 이번 기회에 잘 공부해 놓으면 좋겠죠?
정규표현식(Regular Expression) 이란?
정규표현식은 문자열에서 특정한 문자를 찾아내는 도구입니다.
정규표현식을 이용하면 복잡한 작업을 간단하게 해결할 수 있습니다.
📌 학습을 위해 참고한 사이트 링크입니다.
사이트 구성
RegexOne에서는 정규표현식에 대한 설명과 함께 연습해 볼 수 있는 예제들을 제공하고
총 15개의 Lesson으로 구성되어 있습니다.
오늘은 Lesson 1~5까지의 정규표현식을 연습해 보겠습니다.
Lesson 1: An Introduction, and the ABCs
정규 표현식은 코드, 로그 파일, 스프레드시트 또는 문서와 같은 텍스트에서 정보를 추출하는 데 매우 유용합니다.
정규 표현식을 사용할 때 가장 먼저 인식해야 할 점은 모든 것이 기본적으로 문자이며, 특정 문자 시퀀스와 일치하도록 패턴을 작성하고 있다는 것입니다. 대부분의 패턴은 문자, 숫자, 구두점 및 %#$@!와 같은 키보드의 다른 기호를 포함하는 일반 ASCII를 사용하지만 유니코드 문자는 모든 유형의 국제 텍스트와 일치하도록 사용할 수도 있습니다.
세 행 모두에 맞는 패턴을 작성해 보십시오. 각 행의 일반적인 문자처럼 간단할 수 있습니다.
➡️ 세 가지 작업에 모두 일치하는 abc를 찾아줍니다.
Lesson 1½: The 123s
문자에는 보통 문자도 포함되지만 숫자도 포함됩니다. 사실 0-9도 그냥 문자이고 아스키 표를 보면 순차적으로 나열됩니다.
다양한 수업을 통해 특정 유형의 문자와 일치하는 데 사용할 수 있는 정규식에 사용되는 여러 특수 메타 문자를 소개할 것입니다. 이 경우 \d 문자는 0부터 9까지의 임의의 숫자 대신 사용할 수 있습니다. 앞의 슬래시는 단순 d 문자와 구별되며 메타 문자임을 나타냅니다. (숫자가 아닌 문자는 \D를 사용합니다.)
아래는 숫자를 포함하는 몇 줄의 텍스트입니다. 아래 문자열의 모든 숫자와 일치하는 패턴을 작성하고 패턴이 첫 번째 문자에서 시작하는 것이 아니라 문자열 내의 어디에서나 어떻게 일치하는지 주목하십시오.
➡️ 숫자 123을 직접 찾아주거나 \d를 활용하여 숫자 3개가 포함된 작업을 찾아줍니다.
Lesson 2: The Dot
일부 카드 게임에서 조커는 와일드카드이며 데크에 있는 모든 카드를 나타낼 수 있습니다. 정규 표현식을 사용하면 공통 패턴이나 구조(예: 전화번호 또는 우편 번호)를 공유하는 것 외에 정확한 내용을 모르는 텍스트 조각을 종종 일치시킵니다.
마찬가지로 와일드카드의 개념이 있는데, 이는 . (점) 메타문자로 표현되며 모든 단일 문자(글자, 숫자, 공백 등)와 일치할 수 있습니다. 이것은 실제로 마침표 문자의 일치를 무시하므로, 구체적으로 마침표를 일치시키기 위해서는 슬래시 \.을 사용하여 점을 탈출해야 합니다.
아래에는 다양한 문자가 있지만 길이가 같은 두 개의 문자열이 있습니다. 처음 세 개의 문자열에는 일치할 수 있지만 마지막 문자열에는 일치하지 않는 단일 패턴을 작성해 보십시오. 일부 줄에서 마침표와 일치하려면 점 메타 문자를 탈출해야 할 수도 있습니다.
➡️ 와일드카드(.)로 3개의 단일 문자를 표현해 주고 마지막 마침표를 위해 \.을 사용해 문제를 해결하였습니다.
그냥 마침표만 검색해도 해결 가능합니다.
Lesson 3: Matching specific characters
지난 레슨의 닷 메타 문자는 꽤 강력하지만 때로는 너무 강력합니다. 예를 들어 전화번호와 일치하는 경우 "(abc) def-ghij"라는 문자가 유효한 번호인 것으로 확인하고 싶지 않습니다!
정규 표현식을 사용하여 대괄호 안에 문자를 정의하는 방법이 있습니다. 예를 들어 [abc] 패턴은 a, b, c 문자 하나만 일치하고 다른 문자는 일치하지 않습니다.
아래는 몇 줄인데, 우리는 처음 세 줄만 일치시키고 마지막 세 줄은 일치시키지 않기를 원합니다. 우리가 점을 사용한다면 마지막 세 줄과 일치하는 것을 피할 수 없고 위의 표기법을 사용하여 어떤 글자를 일치시킬 것인지 구체적으로 정의해야 하는 방법을 주목하십시오.
Lesson 4: Excluding specific characters
경우에 따라 일치하지 않는 특정 문자가 있음을 알 수 있습니다. 예를 들어 지역 번호 650이 아닌 전화번호만 일치시킬 수 있습니다.
이를 표현하기 위해 대괄호와 ^(모자)를 사용하여 특정 문자를 제외한 유사한 표현을 사용합니다. 예를 들어 [^abc] 패턴은 문자 a, b, c를 제외한 모든 단일 문자와 일치합니다.
아래 문자열을 사용하여 살아있는 동물과만 일치하는 패턴을 작성해 보십시오. 이 유형의 대부분의 패턴은 동일한 동전의 양면이기 때문에 지난 수업의 기술을 사용하여 어떻게 작성할 수 있는지 주목하십시오. 두 가지 선택 사항을 모두 가짐으로써 어떤 것이 작성하기에 더 쉽고 자신의 패턴을 구성할 때 이해할 수 있는지 결정할 수 있습니다.
➡️ 앞서 해결한 문제처럼 포함시키고 싶은 문자를 대괄호 안에 넣어주거나,
포함시키고 싶지 않은 문자를 대괄호 안에 ^ 와 함께 넣어주는 두 가지로 방법으로 해결할 수 있습니다.
Lesson 5: Character ranges
우리는 방금 특정 문자와 일치하거나 제외하는 패턴을 만드는 방법을 배웠습니다. 하지만 순차적 범위의 문자에 포함될 수 있는 문자와 일치하려면 어떻게 해야 할까요? 우리가 그들을 모두 나열하는 것 외에는 다른 방법이 없을까요?
다행히도 대괄호 표기법을 사용할 때 문자 범위를 나타내기 위해 대시를 사용하여 연속 문자 목록의 문자를 일치시키는 축약법이 있습니다. 예를 들어 [0-6] 패턴은 0부터 6까지의 어떤 한 자리 문자와도 일치하고, 그 외에는 일치하지 않습니다. 마찬가지로 [^n-p]도 n부터 p까지의 문자를 제외하고는 어떤 한 자리 문자와도 일치합니다.
여러 개의 문자 범위는 개별 문자와 함께 동일한 괄호 세트에서도 사용할 수 있습니다. 이러한 예로는 [A-Za-z0-9_] 문자 범위와 동일하고 영어 텍스트의 문자를 일치시키는 데 자주 사용되는 영숫자 \w 메타문자가 있습니다.
아래 연습에서 모든 매치 및 스킵 라인이 어떻게 패턴을 가지고 있는지 주목하고 괄호 표기법을 사용하여 각 라인에서 각 문자를 매치하거나 건너뜁니다. 패턴은 대소문자를 구분하고 a-z는 A-Z와 일치하는 문자 측면에서 다릅니다(대문자 vs 소문자).
➡️ 연속되는 대문자 A, B, C로 시작하는 작업을 찾아주기 위해 대괄호 안에 A-C를 작성하여 문제를 해결할 수 있습니다.
설명을 보며 단계별로 차근차근 따라 하니 어렵지 않게 해결할 수 있었네요🤓
저는 정규 표현식 Lesson 6-10으로 돌아오겠습니다!
📍본 내용은 데이터리안 'SQL 데이터 분석 캠프 실전반' 을 수강하며 작성한 내용입니다.
'Tool > SQL 코딩테스트 풀이' 카테고리의 다른 글
[LeetCode] 511. Game Play Analysis I (0) | 2023.08.22 |
---|---|
[LeetCode] 180. Consecutive Numbers (0) | 2023.08.22 |
[LeetCode] 1084. Sales Analysis III (0) | 2023.08.18 |
[LeetCode] 1045. Customers Who Bought All Products (0) | 2023.08.16 |
[LeetCode] 570. Managers with at Least 5 Direct Reports (0) | 2023.08.15 |