- .(점)은 어떤 문자이건 하나의 문자를 가리킨다. (new line 제외)
- \w 는 대소문자와 밑줄을 포함하는 모든 영숫자 [a-zA-Z0-9_]를 가리킨다.
- \s 는 space, tab 등 white space 를 가리킨다. (\S 는 non-whitespace)
- + 는 1개 또는 그 이상을 가리킨다.
- * 는 0 개 또는 그 이상을 가리킨다.
- ? 는 0 개 또는 1 개를 가리킨다.
- \ 는 특수문자를 표현하는 용도로 사용되지만, 특수문자앞에서는 특수문자의 사용을 제외하고 문자자체를 나타내도록 한다.
>>> import re # re 모듈 import
>>> match = re.search('iig', 'called piig'); # search 를 이용하여 iig 문자열 검색
>>> match.group() # search 결과 match object 의 group 함수 이용
'iig'
>>> type(match) # search 의 return 형이 match object 임
<type '_sre.SRE_Match'>
>>> match
<_sre.SRE_Match object at 0x2b26d13dcbf8>
>>> match = re.search('igs', 'called piig'); # 없는 문자열 검색
>>> match.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> type(match) # 검색 후 return 형을 확인해보니 NoneType
<type 'NoneType'> # 이는 검색 결과가 없다는 것임.
>>> match = re.search('..g', 'called piig'); # . 은 하나의 문자를 가리킴. 즉 앞에 아무문자나
>>> match.group() # 두문자가 온 후 그 다음 문자가 g 인 것을 검색
'iig'
>>> match = re.search('i..g', 'called piig'); # i 와 g 사이에 문자 두개가 있는 것을 검색
>>> match.group() # 결과가 없는 것임. NoneType
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> match = re.search('p..g', 'called piig'); # p 와 g 사이 문자 두개
>>> match.group()
'piig'
>>> match = re.search('a.c', 'a.c called piig'); # a 와 c 사이에 한문자가 있는 문자열 검색
>>> match.group()
'a.c'
>>> match = re.search('a\.c', 'a.c called piig'); # a 와 c 사이 .(점) 문자가 있는 문자열 검색
>>> match.group()
'a.c'
>>> match = re.search('a.c', 'abc called piig'); # a 와 c 사이에 한문자가 있는 문자열 검색
>>> match.group()
'abc'
>>> match = re.search('a\.c', 'abc called piig'); # a.c 라는 문자열 검색 (\. 은 . 문자)
>>> match.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> match = re.search(':\w\w', 'abc called :piig'); # : 문자 뒤에 두개의 아무문자나
>>> match.group()
':pi'
>>> match = re.search(':[\w]+', 'abc called :piig'); # : 문자뒤에 아무문자나 1 개 이상 붙은것
>>> match.group()
':piig'
>>> match = re.search('(\d\d\d)-(\w\w\w)', '123-abc'); # 2 개의 pattern group 검색
>>> match.groups() # 결과로 리턴된 group 을 tuple 로 묶어서 보여줌.
('123', 'abc')
>>> match.group() # 결과 리턴된 각 group 의 string 을 연결해서 보여줌
'123-abc'
>>> match.group(0) # 0 번째 group 은 없고 match.group() 과 같은 결과
'123-abc'
>>> match.group(1) # 첫번째 group (element)을 string 으로 리턴
'123'
>>> match.group(2) # 두번째 group (element)을 string 으로 리턴
'abc'
>>> match = re.search('(ab)','ab'); # 하나의 pattern group 만으로 검색
>>> match.groups() # tuple 의 element 는 하나임
('ab',)
>>> match.group(1)
'ab'
>>> match.group(2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
>>> match = re.search('(aaa).(bbb)@(cc.)', ' aaa.bbb@ccx'); # 3 개의 group 검색
>>> match.groups()
('aaa', 'bbb', 'ccx')
>>> m = re.search('([\w.]+)@([\w.]+)', 'blah dp.lee.dp.lee@gmail.com yyxdf @ aa@xx')
>>> m.groups()
('dp.lee.dp.lee', 'gmail.com')
>>> m.group(1)
'dp.lee.dp.lee'
>>> m.group(2)
'gmail.com'
>>> import re
>>> bool(re.match('[0-9]', ' 77')) # 첫 문자가 안맞으면 false
False
>>> bool(re.search('[0-9]', ' 77')) # 문자열 전체 검색이므로 있으면 true
True
>>> m = re.findall('([\w.]+)@([\w.]+)', 'blah dp.leedp.lee@gmail.com yyxdf @ aa.xx@xx.net')
>>> m.groups() # 결과는 match object 가 아니기 때문에
Traceback (most recent call last): # groups 나 group 같은 함수가 없음.
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'groups'
>>> m.group()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'list' object has no attribute 'group'
>>> m
[('dp.leedp.lee', 'gmail.com'), ('aa.xx', 'xx.net')] # 결과는 각 pattern group 결과(tuple)가
# List 로 묶여진 것임.
# 이후 m 은 List 연산들을 자유롭게 수행.
>>> m = re.search('AA', ' aa bb cc') # default option 으로 사용하면
>>> m.group() # 대소문자 구분해서 아무것도 못찾음
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>> m = re.search('AA', ' aa bb cc', re.I) # re.I 옵션을 사용하니 대소문자 미구분
>>> m.group() # case-insensitive 라고 하죠.
'aa'