프로그래밍 언어/Python

파이썬 Python 실습 :: 기본적인 파일 사용 정리 함수

gamjadori 2024. 1. 17. 00:10
728x90

<정규표현식>

  • 문자열 속에서 특정한 패턴을 가진 문자열을 찾을 때 사용하는 것
  • 복잡한 문자열 속에서 특정한 규칙으로 된 문자열을 검색한 뒤 추출하거나 바꿀 때 사용
  • 문자열이 정해진 규칙이 맞는지 판단할 때 사용
>>> import re
** 정규 표현식을 지원하기 위한 모듈을 제공
re 모듈은 파이썬을 설치할 때 자동으로 설치되는 표준 라이브러리

>>> hello = 'Hello world!!'
>>> print(re.match('Hello', hello))
>> hello에서 'Hello'와 겹치는 게 있는지 찾아서 출력해라
**** re.match:** “문자열의 처음”부터 시작하여 패턴이 일치되는 것이 있는지를 확인
<re.Match object; span=(0, 5), match='Hello'>
>> span=(0, 5): 0~5사이에서 찾았고, 매칭되는 내용은 'Hello'
>>> print(re.match('hello', hello))
None

<이스케이프 문자> 백슬래시를 쓰는 문자

  • 다음 문자가 특수 문자임을 알리는 백슬래시(\)를 사용
  • ^(시작), $(끝)
>>> import re
>>> hello = 'Hello world!!'
>>> print(re.search('^Hello', hello))
>> hello에서 Hello로 시작하는 문자열을 찾아줘.
**** re.search: 문자열 전체를 검색하여 정규식과 매치되는지 조사**
<re.Match object; span=(0, 5), match='Hello'>
>>> print(re.search('!!!!$', hello))
>> hello에서 !!!!$로 끝나는 문자열을 검색해줘
None

<파이프 |> or

>>> print(re.match('hello|world', 'hello'))
>> 'hello에서 hello 또는 world 있는지 찾아줘.
<re.Match object; span=(0, 5), match='hello'>

<범위 지정>

  • [0-9]: 범위 지정
  • *(0개 이상), +(1개 이상)
>>> print(re.match('[1-9]', '12345'))
<re.Match object; span=(0, 1), match='1'>
1~9를 처음부터 살펴서 '12345' 중에서 일치하는 게 있는지 찾아줘.

>>> print(re.match('[1-9]+', '12345'))
<re.Match object; span=(0, 5), match='12345'>
'1부터 9까지 살펴서 '12345' 중에 1개 이상 겹치는지 살펴줘.

>>> print(re.match('[1-9]*', 'hello'))
<re.Match object; span=(0, 0), match=''>
1부터 9까지 살펴서 'hello'와 0개 이상 겹치는지 살펴줘.
0부터 0까지 겹치고 겹치는 내용은 ''이다. (0개여도 결과 나옴. None이 아님)

>>> print(re.match('h*e', 'hhhhhhello')) >> h가 0개 이상
<re.Match object; span=(0, 7), match='hhhhhhe'>
h*e: h가 0개 이상 반복되다가 e (=hhe, hhhhhe)
>>> print(re.match('h+e', 'ello')) h가 1개 이상
None

<? : 한 개의 문자 (0개 이상=0개여도 되고 2개여도 되고 n개여도 됨), . : 한 개의 문자 (1개)>

>>> print(re.match('H?', 'H'))
<re.Match object; span=(0, 1), match='H'>
>>> print(re.match('H.', 'Hbeee'))
<re.Match object; span=(0, 2), match='Hb'>
>>> print(re.match('H.', 'H'))
None >> .은 뒤에 문자가 하나 더 있어야 함.

<문자나 글자 수 표현>

  • 문자{}: 문자 수
  • 문자열{}: 글자 수
>>> print(re.match('H{3}', 'HHHbee'))
<re.Match object; span=(0, 3), match='HHH'>
'HHHbee'를 대상으로 H가 세 번 반복되는 걸 찾아줘
>>> print(re.match('(hello){3}', 'hellohellohello'))
'hellohellohello'를 대상으로 hello가 세 번 반복되는 걸 찾아줘
<re.Match object; span=(0, 15), match='hellohellohello'>
>>> print(re.match('[0-1]{3}', '010hellohellohello'))
'010hellohellohello' 중, 0에서 1이 세 번 반복되는 걸 찾아줘
<re.Match object; span=(0, 3), match='010'>

>>> phone = '010-1234-1234'
>>> print(re.match('[0-9]{4}년[0-9]{2}월[0-9]{2}일', '2024년01월03일'))
<re.Match object; span=(0, 11), match='2024년01월03일'>
'2024년01월03일'를 대상으로 해서 0부터 9까지 4개가 해당하는지,
0에서 9까지 2개가 해당하는지 0에서 9까지 2개가 해당하는지 알려줘.

>>> print(re.match('[0-9]{4}년[0-9]{2}월[0-9]{2}일', '2024년Jun월03일'))
None
결과가 도출되지 않으면 틀린 부분이 있다는 것
(날짜 양식에 맞춰 입력하라고 했을 때 알맞게 적었는지 확인 가능한 함수

<범위 지정>

  • {시작,끝}: 문자 개수의 범위 지정
  • [가-힣]: 한글의 범위는 유니코드 표의 순서
  • [A-Za-z0-9]: 영어의 대소문자, 숫자 포함
>>> print(re.match('[0-9]{3,4}-[0-9]{4}', '010-1234-1234'))
<re.Match object; span=(0, 8), match='010-1234'>
'010-1234-1234'를 대상으로 해 0에서 9까지 3글자에서 4글자까지 들어있는지
0에서 9까지 4글자가 들어있는지 찾아줘.

>>> print(re.match('[0-9]{4}년[A-Za-z0-9]{2,3}월[0-9]{2}일', '2024년01월03일'))
<re.Match object; span=(0, 11), match='2024년01월03일'>
'2024년01월03일'를 대상으로 해서 년은 0에서 9까지 4글자가 있는지
월은 영어 대소문자나 숫자 0에서 9까지 2글자나 3글자가 있는지,
일은 0에서 9까지가 2글자가 있는지 찾아줘.

>>> print(re.match('[a-zA-Z0-9]+', 'Hello1234'))
<re.Match object; span=(0, 9), match='Hello1234'>
'Hello1234'를 대상으로 해서 영어 대소문자, 숫자가 1개 이상 있는지 알려 줘.

<정규표현식 기타 표현>

  • [^0-9] => 숫자가 아닌 모든 문자 (^가 안에 들어가면 부정을 의미)
  • ^[범위]*, ^[범위]+: ^가 밖으로 나오면 시작의 의미
  • [범위]*$, [범위]+$: 뒤에 $가 붙으면 끝을 의미
>>> print(re.match('[^A-Z]+', 'Hello'))
None
'Hello'를 대상으로 해서 영어 대문자가 아닌 것을 찾아줘.
H가 있기 때문에 일치하지 않음.

>>> print(re.match('^[A-Z]+', 'Hello'))
<re.Match object; span=(0, 1), match='H'>
'Hello'를 대상으로 해서 영어 대문자로 시작하는 걸 앞에서부터 찾아줘.
  • \d: [0-9]
  • \D: [^0-9]
  • \w: [a-zA-Z0-9_]
  • \W: [^a-zA-Z0-9_]
  • \s: [ \t\n\r\f\v] (스페이스), (탭), (라인피드), (캐리지리턴), (폼피드), (수직탭)
  • \S: [ ^\t\n\r\f\v]

<문자열을 찾아 변경>

>>> print(re.sub('apple|orange', 'fruit', 'apple box orange tree'))
fruit box fruit tree
'apple box orange tree'을 대상으로 하여 apple이나 orange를 fruit으로 교체해라
**** sub(찾을 패턴, 대체할 문자, 대상): 문자열 바꾸기 교체 함수**