정규식 표현

는는·2023년 3월 14일
0

python

목록 보기
17/19

flag(Python의 옵션)

re.compile('패턴', re.S) ---> 모든 문자(줄 바꿈 포함)
re.compile('패턴', re.I) ---> 대소문 구분 X
re.compile('패턴', re.M) ---> 모든 라인 매칭
re.compile('패턴', re.X) ---> 주석 등 편의 기능 사용 가능
re.compile('패턴', re.A) ---> ASCII만을 사용

매서드

re.compile('패턴').match(문자열) --> 문자열 처음이 정규식 매칭 여부 판단
re.compile('패턴').search(문자열) --> 문자열 전체에서 정규식 매칭 여부 판단
re.compile('패턴').findall(문자열) --> 정규식과 매칭되면 리스트로 반환
re.compile('패턴').finditer(문자열) --> 정규식과 매칭되면 순환가능 객체로 반환
re.compile('패턴').split(문자열) --> 패턴대로 문자열 분할
re.compile('패턴').sub(대체문구, 문자열) --> 패턴을 대체문구로 대체함
re.compile('패턴').fullmatch(문자열) --> 문자열 전체가 정규식에 매칭되는지 여부 판단

매치 객체

group(숫자) ---> 일치한 문자열의 그룹에서 숫자에 해당하는 문자열을 반환
groups(default = None) ---> 일치한 문자열의 모든 그룹을 반환
groupdict(default = None) ---> 일치한 문자열의 패턴을 딕셔너리 값으로 반환
expand(문자열) ---> 일치한 문자열의 그룹에 대해 옵션값에 해당하는 문자열로 반환

정규 표현식

search 사용

import re

정규표현식 = r'([a-zA-Z]+) : (\d+)'
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'
결과 = re.search(정규표현식, 문자열)

print(type(결과))
print(dir(결과))

<class 're.Match'>
['class', 'class_getitem', 'copy', 'deepcopy'
,'delattr', 'dir', 'doc', 'eq', 'format'
, 'ge', 'getattribute', 'getitem', 'gt', 'hash'
, 'init', 'init_subclass', 'le', 'lt', 'ne', 'new'
, 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof'
, 'str', 'subclasshook', 'end', 'endpos', 'expand', 'group'
, 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']

결과.start()
결과.end()

23

문자열[결과.start(): 결과.end()]

'age : 9'

결과.group(2)

'9'

findall 사용

import re

정규표현식 = r'([a-zA-Z]+) : (\d+)'
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'
결과 = re.findall(정규표현식, 문자열)

결과

[('age', '9'), ('height', '130')]

d = dict(결과)
d

{'age': '9', 'height': '130'}

print(type(결과))
print(dir(결과))

<class 'list'>
['add', 'class', 'class_getitem', 'contains', 'delattr', 'delitem', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'gt', 'hash', 'iadd', 'imul', 'init', 'init_subclass', 'iter', 'le', 'len', 'lt', 'mul', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'reversed', 'rmul', 'setattr', 'setitem', 'sizeof', 'str', 'subclasshook', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

finditer 사용

import re

정규표현식 = r'([a-zA-Z]+) : (\d+)'
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'
결과 = re.finditer(정규표현식, 문자열)

결과

<callable_iterator at 0x7f6d9a3de1c0>

for i in 결과:
    print(i)
    print(type(i))
    print(dir(i))

<re.Match object; span=(16, 23), match='age : 9'>
<class 're.Match'>
['class', 'class_getitem', 'copy', 'deepcopy', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']
<re.Match object; span=(25, 37), match='height : 130'>
<class 're.Match'>
['class', 'class_getitem', 'copy', 'deepcopy', 'delattr', 'dir', 'doc', 'eq', 'format', 'ge', 'getattribute', 'getitem', 'gt', 'hash', 'init', 'init_subclass', 'le', 'lt', 'ne', 'new', 'reduce', 'reduce_ex', 'repr', 'setattr', 'sizeof', 'str', 'subclasshook', 'end', 'endpos', 'expand', 'group', 'groupdict', 'groups', 'lastgroup', 'lastindex', 'pos', 're', 'regs', 'span', 'start', 'string']

for i in 결과:
    print(i)
    # print(type(i))
    # print(dir(i))
    print(i.start(), i.end())
    print(i.group())

<re.Match object; span=(16, 23), match='age : 9'>
16 23
age : 9
<re.Match object; span=(25, 37), match='height : 130'>
25 37
height : 130

split 사용

import re

정규표현식 = r'([a-zA-Z]+) : (\d+)'
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'
결과 = re.split(정규표현식, 문자열)

결과

['name : kimnini, ',
'age',
'9',
', ',
'height',
'130',
', email : kimnini-2@naver.com']

import re

정규표현식 = r','
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'

결과 = re.split(정규표현식, 문자열)

결과

['name : kimnini', ' age : 9', ' height : 130', ' email : kimnini-2@naver.com']

sub 사용

import re

정규표현식 = r','
문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'

결과 = re.sub(정규표현식," !!!", 문자열)
결과

'name : kimnini !!! age : 9 !!! height : 130 !!! email : kimnini-2@naver.com'

정규표현식 = re.compile(',')

문자열 = 'name : kimnini, age : 9, height : 130, email : kimnini-2@naver.com'
결과 = 정규표현식.sub(" !-!", 문자열)

결과

'name : kimnini !-! age : 9 !-! height : 130 !-! email : kimnini-2@naver.com'

import re

정규표현식 = re.compile(r'([a-zA-Z])([1-9])')
문자열 = 'a3b2c3'

결과 = 정규표현식.findall(문자열)
결과

[('a', '3'), ('b', '2'), ('c', '3')]

s = ' '
for i, j in 결과:
    s += i * int(j)

s

'aaabbccc'

import re

정규표현식 = r'(?P<one>\d+)-(?P<two>\d+)-(?P<three>\d+) (?P<four>\w+)'
문자열 = '1234-45678-89012 우리은행'
결과 = re.match(정규표현식, 문자열)

결과.expand('\g<four> !!! \g<one> \g<two> \g<three> ')

0개의 댓글