import re
result = re.match('You', 'Young Frankenstein')
‘You’는 패턴이고 ‘Young Frankenstein’은 확인하고자 하는 문자열 소스다.
mathch()
는 소스와 패턴의 일치 여부를 확인한다.youpattern = re.compile('You') result = youpattern.match('Young Frankenstein')
result
<_sre.SRE_Match object; span=(0, 3), match=’You’>
search()
는 첫 번째 일치하는 객체를 반환한다.findall()
은 중첩에 상관없이 모두 일치하는 문자열 리스트를 반환한다.split()
은 패턴에 맞게 소스를 쪼갠 후 문자열 조각의 리스트를 반환한다.sub()
는 대체 인자를 하나 더 받아서, 패턴과 일치하는 모든 소스 부분을 대체 인자로 변경한다.시작부터 일치하는 패턴 찾기:
match()
def printm(m): if m: print(m.group()) source = 'Young Frankenstein' m = re.match('You', source) # match는 소스의 시작부터 패턴이 일치하는지 확인. if m: # match는 객체를 반환한ㄷ. print(m.group())
You
m = re.match('^You', source) if m: print(m.group())
You
m = re.match('Frank', source) if m: print(m.group())
m = re.search('Frank', source) if m: print(m.group())
Frank
m = re.match('.*Frank', source) printm(m)
Young Frank
- .은 한문자를 의미한다.
- *는 이전패턴이 여러개 올 수 있다는 것을 의미한다. 그러므로 .*는 0회 이상의 문자가 올 수 있다는 것을 의미한다.
- Frank는 포함되어야 할 문구를 의미한다.
첫 번째 일치하는 패턴 찾기: search()
m = re.search('.*Frank', source) printm(m)
Young Frank
일치하는 모든 패턴 찾기: findall()
m = re.findall('n', source) m
[‘n’, ‘n’, ‘n’, ‘n’]
print('Found', len(m), 'matches')
Found 4 matches
m = re.findall('n.', source) m
[‘ng’, ‘nk’, ‘ns’]
m = re.findall('n.?', source) m
[‘ng’, ‘nk’, ‘ns’, ‘n’]
패턴으로 나누기: split()
m = re.split('n', source) m
[‘You’, ‘g Fra’, ‘ke’, ‘stei’, ‘’]
일치하는 패턴 대체하기: sub()
m = re.sub('n', '?', source) m
‘You?g Fra?ke?stei?’
패턴: 특수 문자
- 리터럴은 모든 비특수 문자와 일치한다.
- \n을 제외한 하나의 문자: .
- 0회 이상: *
- 0 또는 1회: ?
import string printable = string.printable len(printable)
100
printable[0:50]
‘0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN’
printable[50:]
‘OPQRSTUVWXYZ!”#$%&'()*+,-./:;<=>?@[\]^_`{|}~ \t\n\r\x0b\x0c’
m = re.findall('\d', printable) m
[‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
m = re.findall('\w', printable) print(m)
[‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’, ‘g’, ‘h’, ‘i’, ‘j’, ‘k’, ‘l’, ‘m’, ‘n’, ‘o’, ‘p’, ‘q’, ‘r’, ‘s’, ‘t’, ‘u’, ‘v’, ‘w’, ‘x’, ‘y’, ‘z’, ‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘I’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘O’, ‘P’, ‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’, ‘Y’, ‘Z’, ‘_’]
re.findall('\s', printable)
[’ ‘, ‘\t’, ‘\n’, ‘\r’, ‘\x0b’, ‘\x0c’]
x = 'abc' + '-/*' + '\u00ea' + '\u0115'
x
‘abc-/*êĕ’
re.findall('\w', x)
[‘a’, ‘b’, ‘c’, ‘ê’, ‘ĕ’]
패턴: 지정지
source = '''I wish I may, I wish I might Have a dish of fish tonight.'''
re.findall('wish', source)
[‘wish’, ‘wish’]
re.findall('wish|fish', source)
[‘wish’, ‘wish’, ‘fish’]
re.findall('^wish', source)
[]
re.findall('^I wish', source)
[‘I wish’]
re.findall('fish$', source)
[]
re.findall('fish tonight\.$', source)
[‘fish tonight.’]
re.findall('[wf]ish', source)
[‘wish’, ‘wish’, ‘fish’]
re.findall('[wsh]+', source)
[‘w’, ‘sh’, ‘w’, ‘sh’, ‘h’, ‘sh’, ‘sh’, ‘h’]
re.findall('ght\W', source)
[‘ght\n’, ‘ght.’]
re.findall('I (?=wish)', source)
[‘I ‘, ‘I ‘]
re.findall('(?<=I) wish', source)
[’ wish’, ‘ wish’]
re.findall(r'\bfish', source)
[‘fish’]
패턴: 매칭 결과 지정하기
- match() 또는 search()를 사용할 떄 모든 매칭은 m.gorup()과 같이 객체 m으로 부터 결과를 반환한다.
import re m = re.search(r'( dish\b).*(\bfish)', source)
m.group()
’ dish of fish’
m.groups()
(‘ dish’, ‘fish’)
m.group(2)
‘fish’
m = re.search(r'(?P<DISH>. dish\b).*(?P<FISH>\bfish)', source)
m.group()
‘a dish of fish’
m.groups()
(‘a dish’, ‘fish’)
m.group('DISH')
‘a dish’
m.group('FISH')
‘fish’
Comments