5. Regular Expression

Eunji·2025년 12월 11일

1. Regular Expression

String

  • Character: 'a', 'b', 'c'와 같이 글자 하나하나를 의미
  • String: 문자들이 여러 개 모여 있는 것을 의미

파이썬에서는 따옴표(작은, 큰)로 둘러싸여 있는 것을 의미한다.

1.1 Regular Expression

  • Regular Expression, regex, rational expression, regexp, etc.,
  • 아주 간단하게 표현하자면 특정한 문자열의 규칙을 찾고(1) 가공(2)하는 방법
  • 긴 문자열에서 특정 규칙을 가진 문자열을 찾거나, 어떤 패턴을 가진 문구를 찾는 데 유용

1. re.match()

  • 어떤 string의 시작점에서 pattern 찾기
  • match는 해당 문자열의 가장 처음부터 원하는 패턴의 문자열을 찾는 명령
    • 패턴은 간단히 문자열로 정의
      • 패턴 문자열을 re.compile()에 전달해 패턴 객체를 생성해두기도 함.
    • 정의한 문자열 또는 패턴 객체는 re.match(), re.search() 등 다른 함수의 패턴 인수로 전달할 때 사용
  • 대소문자 구분
  • 시작부터 매칭되었는지 찾는 함수이기 때문에 텍스트 중간에 있는 패턴은 찾지 못함
  • match되면 객체 반환, 그렇지 않으면 None 반환
  • 정규 표현식에는 match를 찾는 것(re.match()나 re.search())과 반환하는 것(group(), groups())은 별개의 과정

2. re.search()

  • 사용 방법은 match와 같음
  • match와 다르게 문장 중간에 있는 pattern 찾기 가능

match는 처음부터 패턴이 동일할 때만 그 값을 찾을 수 있는 반면, search는 중간에 패턴이 있어도 찾아낼 수 있다.

re.match(), re.search(), (+re.fullmatch())

  • 세 함수는 하는 일이 비슷함
  • 문자열에서 패턴이 match시킬 위치를 제약하는 정도에만 차이 존재
    • re.match(): 문자열 시작점에서만 패턴 매치
    • re.search(): 문자열 어느 위치에서나 패턴 매치
    • re.fullmatch(): 문자열의 시작부터 끝까지 전체 매치만 가능.

1.2 Escape Character

.

  • .은 한 개의 임의의 문자
    • 정규 표현식이 "a.c"라면 a와 c 사이에 임의의 1개의 문자 올 수 있음

?

  • ?는 바로 앞의 문자가 존재할 수도 있고, 존재하지 않을 수도 있음
    • 있다고 판단할 수도, 없다고 판단할 수도 있다.

*

  • *는 바로 앞의 문자가 0개 이상일 경우 의미
    • 바로 앞의 문자가 여러개 존재할 수도 있고, 존재하지 않을 수도
    • 정규 표현식이 a*bc인 경우 매치할 수 있는 경우는 abc, aabc, aaabc 등 a의 개수가 아주 많아도 됨

+

  • +는 *와 유사
  • 차이점은 앞의 문자가 최소 1개 이상이어야 함

{m}

  • 문자 뒤에 {m} 기호를 붙이면 해당 문자를 숫자 {m}만큼 반복한 것을 의미
    • ab{2}c는 a와 c 사이에 b가 2번 등장하는 문자열에 대해서 match

{m, n}

  • 문자 뒤에 {m, n} 기호를 붙이면 해당 문자를 숫자1(m) 이상 숫자2(n) 이하만큼 반복한 것을 의미
    • 정규 표현식이 ab{2, 8}c라면 a와 c 사이에 b가 2개 이상 8개 이하로 등장한 문자열에 대해서 match

{m,}

  • 문자 뒤에 {m,} 기호를 붙이면 해당 문자를 숫자(m) 이상 만큼 반복
    • 정규 표현식이 a{2,}bc라면 뒤에 bc가 붙으면서 a의 갯수가 2개 이상인 경우인 문자열과 match
      • {0,}을 쓴다면? *와 동일한 의미
      • {1,}을 쓴다면? +와 동일한 의미

[]

  • [] 안에 문자들을 넣으면 그 문자들 중 한 개의 문자와 match
    • 정규 표현식이 [abc]라면, a 또는 b 또는 c가 들어가있는 문자열과 match
      • 범위 지정 가능
      • [a-zA-Z]는 알파벳 전부를 의미, [0-9]는 숫자 전부를 의미
  • 알파벳 소문자에 대해서만 범위 지정하여 정규 표현식을 만들어보고 문자열과 match하면?

[^]

  • ^기호 뒤에 붙은 문자들을 제외한 모든 문자 match
    • [^abc]라는 정규 표현식이 있다면, a 또는 b 또는 c가 들어간 문자열을 제외한 모든 문자열 match
profile
갓생호소인

0개의 댓글