Py) TM - 정규표현식-02(패턴조합)

Py) TM - 정규표현식-02(패턴조합)

Pandas 객체 기반 정규표현식을 활용할 때 2개 이상의 정규표현식 패턴을 조합하는 사례를 알아본다.


개요

정규표현식(regular expression)은 특정 정규식 패턴을 단독으로 사용하는 경우도 있으나 2개 이상의 패턴을 조합하여 사용하는 경우도 많다. 이번 게시물에서는 Pandas 객체 기반 정규표현식을 활용할 때 2개 이상의 정규표현식 패턴을 조합하는 사례를 알아본다.

패턴 조합

Py) TM - 정규표현식-01(개요) 게시글에서 소개한 핵심 정규표현식 패턴을 조합하여 활용하는 사례를 살펴보자. 핵심 정규표현식을 다음의 표에서 다시 확인 해보자.

정규표현식 예시 설명
^ ^a ~로 시작하는(a로 시작하는)
$ a$ ~로 끝나는(a로 끝나는)
| a|b 또는(a 또는 b)
. a. 임의의 단일 문자(a 뒤에 임의의 단일 문자)
[] [a-z] 문자 클래스(a부터 z까지 문자 중 하나. 즉, 영문 소문자)
[^] [^a-z] 부정 문자 클래스(a부터 z까지의 문자가 아닌 한 글자. 영문 소문자 제외)

예를 들어 숫자로 시작하는 패턴을 매칭하고자 한다면 시작을 뜻하는 “^”와 숫자를 뜻하는 “[0-9]“를 조합하여 “^[0-9]“를 사용할 수 있다. 또는 영문 소문자로 끝나는 패턴을 매칭하고자 한다면 영문 소문자를 뜻하는 “[a-z]“와 끝을 뜻하는 “$“를 조합하여 “[a-z]$“를 사용할 수 있다. 이처럼 2개 이상의 정규표현식 패턴을 조합하여 사용할 수 있다.

실습

다음과 같이 라이브러리와 데이터를 준비한다.

1
2
3
import pandas as pd

ser = pd.Series(["1a", "2a", "time", "version1", "version23"])

2개 패턴 조합

다음과 같이 .str.contains() 메서드를 사용하여 정규식 패턴 2개를 조합하는 예제를 알아보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
ser[ser.str.contains("^[0-9]")] # 1
## 0 1a
## 1 2a
## dtype: object

ser[ser.str.contains("[0-9]$")] # 2
## 3 version1
## 4 version23
## dtype: object

ser[ser.str.contains("^[a-z]")] # 3
## 2 time
## 3 version1
## 4 version23
## dtype: object

ser[ser.str.contains("[a-z]$")] # 4
## 0 1a
## 1 2a
## 2 time
## dtype: object

1번 코드는 숫자로 시작하는 패턴, 2번 코드는 숫자로 끝나는 패턴, 3번 코드는 영문 소문자로 시작하는 패턴, 4번 코드는 영문 소문자로 끝나는 패턴을 매칭하는 예제이다.

3개 이상 패턴 조합

3개 이상의 패턴을 조합하여 사용할 수도 있다. 사실상 이어붙이면 되기 때문에 정규식 패턴 2개를 사용하는 것과 특별하게 다를 것이 없다. 다음의 예제를 살펴보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
ser[ser.str.contains("^1|^2")] # 1
## 0 1a
## 1 2a
## dtype: object

ser[ser.str.contains("[a-z][0-9]$")] # 2
## 3 version1
## dtype: object

ser[ser.str.contains("^[a-z]|[0-9]$")] # 3
## 2 time
## 3 version1
## 4 version23
## dtype: object

1번 코드는 숫자 1로 시작하거나 숫자 2로 시작하는 패턴을 매칭하고, 2번 코드는 영문 소문자 한글자에 이어서 숫자 1개로 끝나는 패턴을 매칭하며, 3번 코드는 영문 소문자로 시작하거나 숫자로 끝나는 패턴을 매칭하는 코드이다.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×