728x90
반응형
"Life is too short, You need python"
정규 표현식(Regular expressions)은 특정한 패턴 또는 규칙을 가진 문자열의 집합을 표현하는 형식 언어입니다. 복잡한 문자열을 처리(검색/치환)할 때 사용되는 기법이며, Python 뿐만 아니라 문자열을 처리하는 대부분의 언어에서 사용됩니다. 정규 표현식에 대한 가장 기본인 메타문자의 의미와 사용법에 대해 알아보겠습니다.
Regular Expressions ( 정규 표현식 )
메타문자(Meta Characters)란 특별한 용도로 사용되는 문자를 말하며 정규 표현식에서 사용되는 메타는 다음과 같습니다.
. ^ $ * + ? \ | ( ) { } [ ]
[ ] / [ - ] / [^ ]
[ ]
[ ] 사이의 문자들 중 '하나'와 매치
[ - ] 하이픈(-)으로 연결 시 '범위'를 의미
[^ ] ^으로 시작할 경우 '반대'의 의미 (해당 문자가 아니면 매치)
( Example )
- '[bctl]ake' : 'b', 'c', 't', 'l' 중 하나와 매치 후 'ake'와 → 'take', 'cake', 'take', 'lake'
- '[0-9]' : 숫자와 매치 → 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- '[^0-9]' : 숫자가 아닌 것과 매치(not number)
- '[a-z]' / '[A-Z]' / '[a-zA-Z]' : 알파벳(소문자) / 알파벳(대문자) / 알파벳(대·소문자)
- '[a-zA-Z0-9_]' : 영어(문자)와 숫자
- '[0-5]' : 0, 1, 2, 3, 4, 5
- '[a-c]' : 'a', 'b', 'c' (매치), 'cat' (매치), 'tree' (매치 X)
- '[^abc]' : 'a', 'b', 'c'를 제외한 모든 문자와 매치
- '^a'
→a, aaa (매치)
→aaa # 매치
→baaa # 매치 안됨
→1aaa # 매치 안됨
\ ( 역 슬래쉬 ) + 문자( d / D, s / S, w / W ) : 축약 표현식
\
자주 사용하는 표현식은 d/D, s/S, w/W 등 문자와 조합하는 별도 표기법으로 표현 합니다.
( Example )
- '\d' : 숫자와 매치 → [0-9]와 동일한 표현식
- '\D' : 숫자가 아닌 것과 매치 → [^0-9]와 동일한 표현식이다.
- '\s' : whitespace 문자와 매치 → [ \t\n\r\f\v]와 동일한 표현식 ※ 맨 앞의 빈 칸은 공백문자(space)를 의미
- '\S' : whitespace 문자가 아닌 것과 매치 → [^ \t\n\r\f\v]와 동일한 표현식
- '\w' : 문자 + 숫자(alphanumeric)와 매치 → [a-zA-Z0-9_]와 동일한 표현식
- '\W' : 문자 + 숫자(alphanumeric)가 아닌 문자와 매치 → [^a-zA-Z0-9_]와 동일한 표현식
- '\b' : 단어 경계 (`\w`와 `\W`의 경계)
- '\B' : 비단어 경계
※ '\d' ↔ '\D', '\s' ↔ '\S', '\w' ↔ '\W', '\b' ↔ '\B' : 소문자와 대문자는 서로 반대의 의미
. ( Dot ) : 모든 문자
Dot(.)
메타 문자는 줄바꿈 문자인 '\n'을 제외한 모든 문자와 매치됨을 의미합니다.
( Example )
- 'a.b' : 'a + 모든 문자 + b'를 뜻함
→ 'aab', 'a0b' (매치)
→ 'abc' (a와 b 사이 문자가 없으므로 매치 X)
- 'a[.]b' : [] 사이에서 .을 사용할 경우 문자 원래의 의미인 마침표가 됩니다.
→ 'a.b' (a와 b 사이에 마침표가 있으므로 매치)
→ 'a0b' (a와 b 사이에 마침표가 없으므로 매치 X)
* / + / ? / {m, n} : 반복
*
바로 앞의 문자와 동일한 문자가 몇 개가 오든(무한대, 약 2억개 정도) 매치됩니다.(단, 0개도 포함)
+
바로 앞의 문자가 최소 1회 이상 반복되어야 매치
?
바로 앞의 문자가 없거나 하나 있을 때 매치
{n} / {n,} / {,n} / {m, n} : *, +, ? 대체 가능
{n} : 바로 앞의 문자가 n회 반복
{n, } : 바로 앞의 문자가 n ~ ∞까지 반복
{, n} : 바로 앞의 문자가 0 ~ n회까지 반복
{m, n} : 바로 앞의 문자가 m ~ n회까지 반복
( Example )
- 'ap*le' : 'p'가 0회 이상 반복
→ 'ale', 'aple', 'apple', 'appppple' (모두 매치)
- 'ap+le' : 'p'가 1회 이상 반복
→ 'ale' (매치 X)
→ 'aple', 'apple', 'appppple' (모두 매치)
- 'ap?le' : 'p'가 0 또는 1회만 허용
→ 'ale', 'aple' (모두 매치)
→ 'apple', 'appppple' (매치 X)
- 'ap{2, 5}le' : 'p'가 m ~ n회까지 반복
→ 'ale', 'aple', 'apppppple' (매치 X)
→ 'apple', 'appple', 'apppple', 'appppple' (모두 매치)
※ {0, } == *, {1, } == +, {0, 1} == ?
| / ^ / $ / \A / \Z
|
여러 개의 정규표현식들을 | 로 구분하면 or 의 의미가 적용, 정규 표현식들 중 어느 하나와 매치
^
^ 바로 뒤에 있는 문자로 시작하면 매치 ( ※ 단, re.MULTILINE 옵션이 적용되면 각 줄의 첫 문자를 검사하여 매치)
$
$ 바로 앞에 있는 문자로 끝나면 매치 ( ※ 단, re.MULTILINE 옵션이 적용되면 각 줄의 마지막 문자를 검사하여 매치)
\A
^와 동일하지만 re.MULTILINE 옵션 무시하고 항상 문자열 첫 줄 시작 문자 검사
\Z
$와 동일하지만 re.MULTILINE 옵션 무시하고 항상 문자열 첫 줄 시작 문자 검사
- a | b | c
→ 'a', 'b', 'c', 'ab', 'abc' (매치)
→ 'd' (매치 X)
- ^a
→ 'a', 'aaa' (매치)
→ 'baaa', '1aaa' (매치 X)
- a$
→ 'a', 'aa', 'baa' (매치)
→ 'aabb' (매치 X)
마무리
정규 표현식의 가장 기본적인 메타문자 의미와 활용법에 대해서 알아보았습니다.
728x90
반응형
'PYTHON > Tips' 카테고리의 다른 글
(Python/Basic) Index 1부터 시작하고 싶을 때 ( start at 1 instead of 0 ) (0) | 2022.07.07 |
---|---|
(5min. Python) 예시로 보는 정규 표현식(Regular Expressions) (0) | 2022.07.06 |
(5min. Python) __file__의 의미 (현재 실행 중인 file path 반환) (0) | 2022.07.04 |
(5min. Python) 데이터 Type 확인 - type(), isinstance() (0) | 2022.07.04 |
(5min. Python) 문자열(String)에서 숫자(Integer)만 추출(extract)하는 방법, , re.sub(), re.findall() (0) | 2022.07.04 |