[파이썬] 정규표현식 2 ([], *, +, ?, .)

범위[] 추가 기호 * +

import re

test1 = re.match('[0-9]', "12345678")
test2 = re.match('[0-9]*', "12345678")
test3 = re.match('[0-9]+', "12345678")
test4 = re.match('[0-9]*', "abc123abc")
test5 = re.match('[0-9]+', "abc123abc")

print(test1, test2, test3, test4, test5, sep='\n')
<re.Match object; span=(0, 1), match='1'>
<re.Match object; span=(0, 8), match='12345678'>
<re.Match object; span=(0, 8), match='12345678'>
<re.Match object; span=(0, 0), match=''>
None

패턴에 [][0-9]면 0~9 까지의 숫자 범위 의미이다.

test1의 의미는 1 글자가 0~9 까지 범위의 숫자가 있나? 라고 묻는 것이다.

[] 에는 *+ 를 넣을 수 있다 각각 의미하는 바는 다르다.
* 는 해당 [] 안의 패턴이 없어도 되는 것이고, + 는 해당 [] 패턴이 1개라도 있어야 한다는 것이다.

test2의 의미는 패턴이(0~9 까지의 범위의 숫자) 문자열의 문자 0개 이상 있는지 판단
test3의 의미는 패턴이(0~9 까지의 범위의 숫자) 문자열의 문자 1개 이상 있는지 판단
test4는 없기 때문에 0 ~ 0 까지라고 알려줌 (즉, 없어도 일단 돌아간다는 의미)
test5는 문자열 1개 이상 패턴과 맞은게 없으니 None 출력 (즉, 1개 이상은 무조건 있어야 한다는 의미)


범위[] 추가 기호 * + 활용

import re

test1 = re.match('이*창우', '창우')
test2 = re.match('이+창우', '창우')
test3 = re.match('이*창우', '이이이이창우')
test4 = re.match('이+창우', '이이이이창우')

print(test1, test2, test3, test4, sep='\n')
<re.Match object; span=(0, 2), match='창우'>
None
<re.Match object; span=(0, 6), match='이이이이창우'>
<re.Match object; span=(0, 6), match='이이이이창우'>

test1 은 패턴의 * '이'0개 이상 이면 되어서 '창우' 까지 판단
test2 는 패턴의 + '이'무조건 1개 이상 들어가야해서 None 이 뜬다
test3 은 패턴의 * '이'0개 이상 이면 되어서 '이이이이창우''이이이이'를 보고 '창우' 까지 판단
test4 는 패턴의 + '이'무조건 1개 이상 들어가야해서 '이이이이창우''이이이이'를 보고 '창우' 까지 판단

? 및 . 사용

import re

test1 = re.match('abc?d', 'abd')
test2 = re.match('ab[0-9]?d', 'ab3d')
test3 = re.match('ab.d', 'abxd')
test4 = re.match('ab.d', 'abd')

print(test1, test2, test3, test4, sep='\n')
<re.Match object; span=(0, 3), match='abd'>
<re.Match object; span=(0, 4), match='ab3d'>
<re.Match object; span=(0, 4), match='abxd'>
None

? 앞의 문자(범위)가 0개 또는 1개 가 있는지 판단
. 은 . 이 있는 위치에 아무 문자(숫자)가 1개 있는지 판단

댓글남기기