정규표현식(미완)

yuns_u·2021년 11월 17일
0

정규표현식

정규표현식의 정의
정규표현식의 활용
정규표현식 또는 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어이다.
문자열을 처리하는 모든 곳에서 사용할 수 있는 것으로

정규표현식은 컴퓨터 과학의 정규 언어로부터 유래하였으나 구현체에 따라서 정규 언어보다 더 넓은 언어를 표현할 수 있는 경우도 있으며 정규표현식 자체의 문법도 여러 가지 존재하고 있다.

정규표현식은 텍스트가 준수해야하는 패턴을 표현하기 위해 특정한 표준 텍스트 신텍스를 의미하기 위해 사용된다.
정규표현식의 각 문자(패턴을 기술하는 문자열 안의 각 문자)는 메타문자로 이해되거나 정규 문자로 이해된다.

  • 정규표현식과 다양한 메소드는 데이터를 분석하기 전 데이터를 구분하기 위해 많이 활용된다.
  • 실무에서는 맡은 업무와 개선해야할 서비스에 따라 사용하게되는 정규표현식 메소드는 달라질 수 있다.
  • 정규표현식 등과 같은 기술은 프로그래밍 언어나 특정 기술에 종속되지 않고 쓰이기 때문에 익숙해져야하는 요소 중 하나이다.

메타문자(meta characters)

메타문자란 원래 그 문자가 가진 뜻이 아닌, 특별한 용도로 사용하는 문자를 말한다.

메타 문자의 예시들 : . ^ $ * + ? { } [ ] \ | ( )
정규표현식에서 위의 메타문자를 사용하면 특별한 의미를 갖게 된다.

문자 클래스: [ ]

문자클래스(character class)는 [ ]이다.
문자 클래스 안에는 어떠한 문자라도 들어갈 수 있으며 이는 [ ]사이의 문자들과 Match하라는 의미이다.
즉, [abc]가 정규표현식이라면 이 표현식은 a,b,c 중 한 개의 문자와 일치하는 것을 의미한다.
'a'는 정규식에 'a'가 있으므로 일치하고 'after'는 정규식의 'a'와 일치하지만 'die'는 정규식과 일치하는 문자가 없으므로 일치하지 않는다.

[ ] 안의 두 문자 사이에 하이픈(-)을 사용하면 두 문자 사이의 범위(From~To)를 의미한다.
[abc]와 [a-c]는 같은 의미이며 [0-4]와 [01234] 역시 같은 의미를 나타낸다.

[a-zA-Z]는 알파벳 소문자와 대문자 모두를 의미하며 [0-9]는 모든 숫자를, [가-힣]은 한국어 글자(자음 모음만 있는 경우를 제외)를 의미한다.

문자클래스를 사용할 때에는 주의해야하는 메타문자가 있다.
바로 ^이다.
문자 클래스 안에 메타 문자 ^를 사용하면 뒤의 문자를 제외한다는 것을 의미한다.


정규식을 이용한 문자열 검색

match() : 문자열의 처음부터 정규식과 매치되는지 조사한다.
search() : 문자열 전체를 검색하여 정규식과 매치되는지 조사한다.
findall() : 정규식과 매치되는 모든 문자열(substring)을 리스트로 돌려준다.
finditer() : 정규식과 매치되는 모든 문자열(substring)을 반복 가능한 객체로 돌려준다.

match와 search는 정규식과 매치될 때 match객체(정규식의 검색결과로 돌려주는 객체)를 돌려주고, 매치되지 않을 때에는 None을 돌려준다.

#정규표현식 라이브러리
import re

wordlist = ['color','colour','work','working','fox','worker','working']

for word in wordlist:
    if re.search('col.r', word):
        print(word)
#color

다양한 메소드의 활용

  • rjust(width, [fillchar]) : 원하는 문자를 따로 지정하고, 다른 문자열로 앞부분을 채워줄 수 있다.
print("2".rjust(3,"0"))
#2를 0을 사용해서 세자리수로 나타내라.
#"002"

print("50000".rjust(5,"0"))
#50000을 0을 사용해서 다섯자리수로 나타내라.
#"50000"

print("123".rjust(5,"0"))
#123을 0을 사용해서 다섯자리수로 나타내라.
#"00123" 

print("123".rjust(5,"a"))
#123을 a를 사용해서 다섯자리수로 나타내라.
#"aa123"
  • zfill(width)

  • split

  • 얕은 복사(copy())

  • 깊은 복사(deep copy)

    • 완전히 새로운 변수를 만드는 것이라고 볼 수 있다.
    • 깊은 복사는 내부의 객체들까지 새롭게 copy되는 것이다.
profile
💛 공부 블로그 💛

0개의 댓글