AI 부트캠프/챕터3(11.08~12.04)

TIL 41

musukie 2024. 11. 17. 23:59

강의 외부에서 추가로 알게 된 내용

eval() 함수

Python에서 문자열 형태로 작성된 표현식을 실행하여 그 결과를 반환하는 함수다. 즉, 코드나 수식을 문자열로 받아서 실행시켜 결과를 돌려준다. 예를 들어보자.

# 기본적인 사용 예시
expression = "3 + 5 * 2"
result = eval(expression)  # 문자열 안의 수식을 계산하여 실행
print(result)  # 출력: 13

위 코드에서 eval()은 문자열 "3 + 5 * 2"를 실제 코드처럼 계산해서 결과값인 13을 반환한다.

 

그러나 eval()은 보안상의 위험이 있을 수 있다. 입력된 문자열이 안전한지 확인하지 않으면 의도치 않은 코드를 실행하여 보안 문제가 발생할 수 있다. 예를 들어, 악의적인 코드가 포함된 문자열을 eval()로 실행하면 시스템에 영향을 줄 수 있다. 따라서 신뢰할 수 없는 사용자 입력에 eval()을 사용하는 것은 피하는 것이 좋다.


정규 표현식 ( Regular Expression, 줄여서 Regex )

정규 표현식은 문자열에서 특정 패턴을 찾거나, 문자열을 변환하고, 데이터를 추출하는 데 사용되는 강력한 도구다. 정규 표현식은 문자들의 특정 순서나 패턴을 지정하여 문자열을 검색, 일치시키거나 변경할 수 있다. 주로 텍스트 분석, 검색, 치환, 유효성 검사 등에 활용된다. 정규 표현식은 복잡한 문자열 검색을 간단하게 만들어주며, 여러 문자열을 한 번에 처리하는 데 매우 유용하다.

 

정규 표현식의 기본 구성 요소를 살펴보자.

 

  • 일치 문자 (Literal Characters)
    • 정규 표현식에서 일치하려는 문자 그대로를 사용할 수 있다.
    • 예: abc는 abc라는 문자열을 찾는다.
  • 메타문자 (Metacharacters)
    • 특별한 의미를 가진 문자로, 정규 표현식의 동작을 제어한다.
    • . : 임의의 문자 1개와 일치 (줄 바꿈 제외)
      • 예: a.b는 "aab", "acb", "a1b" 등과 일치한다.
    • ^ : 문자열의 시작
      • 예: ^abc는 "abc"로 시작하는 문자열을 찾는다.
    • $ : 문자열의 끝
      • 예: abc$는 "abc"로 끝나는 문자열을 찾는다.
    • [ ] : 대괄호 안에 있는 문자들과 일치
      • 예: [abc]는 "a", "b", 또는 "c"와 일치한다.
    • | : OR 연산자
      • 예: abc|xyz는 "abc" 또는 "xyz"와 일치한다.
  • 수량자 (Quantifiers):
    • 패턴이 얼마나 반복될 수 있는지 지정한다.
    • * : 0회 이상의 반복
      • 예: a*b는 "b", "ab", "aaab" 등과 일치한다.
    • + : 1회 이상의 반복
      • 예: a+b는 "ab", "aab", "aaab" 등과 일치한다.
    • ? : 0회 또는 1회의 반복
      • 예: a?b는 "b" 또는 "ab"와 일치한다.
    • {n} : 정확히 n회 반복
      • 예: a{2}는 "aa"와 일치한다.
    • {n,} : n회 이상의 반복
      • 예: a{2,}는 "aa", "aaa", "aaaa" 등과 일치한다.
    • {n,m} : n회 이상, m회 이하의 반복
      • 예: a{2,4}는 "aa", "aaa", "aaaa"와 일치한다.
  • 문자 클래스 (Character Classes):
    • \d : 숫자 (0-9)
      • 예: \d{3}는 3자리 숫자와 일치한다. 즉, \d는 숫자고, {3}회 반복해야 하니까 숫자 3개가 연속으로 나와야 한다. '123', '456', '999'
    • \w : 영숫자 (a-z, A-Z, 0-9, _)
      • 예: \w+는 하나 이상의 영숫자와 일치한다.
    • \s : 공백 문자 (공백, 탭, 줄 바꿈 등)
      • 예: \s+는 하나 이상의 공백 문자와 일치한다.
    • \D : 숫자가 아닌 문자
      • 예: \D+는 숫자가 아닌 문자가 하나 이상인 부분과 일치한다.
    • \W : 영숫자가 아닌 문자
      • 예: \W+는 영숫자가 아닌 문자가 하나 이상인 부분과 일치한다.
  • 그룹화 (Grouping and Capturing):
    • ( ) : 소괄호로 묶어서 그룹을 생성할 수 있다. 이 그룹은 나중에 참조할 수 있다.
      • 예: (abc)+는 "abc"가 하나 이상 반복되는 부분과 일치한다.
    • (?:) : 비캡처 그룹, 일치하긴 하지만 그룹화한 값을 참조할 수 없다.
      • 예: (?:abc)+는 "abc"가 하나 이상 반복되는 부분과 일치하지만, 캡처 그룹으로는 저장되지 않습니다.

- 비캡처 그룹이란?

더보기
더보기

 

비캡처 그룹 (?:...)

(?:...)는 그룹화는 하되, 그 그룹의 일치한 값을 참조하거나 저장하지 않겠다고 명시하는 것이다. 즉, 일치한 부분은 찾지만 그 결과를 그룹으로 저장하지 않기 때문에 참조할 수 없다. 이 방식은 주로 그룹화가 필요하지만 참조는 하지 않겠다는 의도를 나타낼 때 사용된다.

 

왜 비캡처 그룹을 사용할까?

  • 성능 최적화
    캡처 그룹은 그룹화된 내용을 저장하지 않기 때문에 메모리 사용을 줄이고, 성능을 개선할 수 있다. 만약 그룹화된 값을 참조할 필요가 없다면 비캡처 그룹을 사용하는 것이 더 효율적이다.
  • 그룹화만 필요할 때
    정규 표현식에서 특정 패턴을 묶을 필요가 있지만, 해당 패턴을 따로 저장하거나 참조할 필요는 없을 때 비캡처 그룹을 사용한다. 예를 들어, 여러 개의 선택지를 묶는 경우 등에서 유용하다.

예를 들어보자.

정규 표현식: (?:\d{3})-(\d{4})

  • 텍스트: "123-4567"

이 정규 표현식에서는 \d{3}을 비캡처 그룹으로 묶고, \d{4}는 캡처 그룹으로 묶는다. 이 경우, "123"은 추출되지 않으며, "4567"만 추출된다. 비캡처 그룹을 사용한 이유는 123을 추출할 필요가 없기 때문이다.

  • 이스케이프 문자 (Escape Characters):
    • 일부 문자는 정규 표현식에서 특별한 의미를 가지므로, 이들을 문자 그대로 사용하려면 앞에 역슬래시(\)를 붙여야 한다.
    • 예: \.은 마침표 문자 자체를 찾는 정규 표현식이다.

예를 들어보자.

1. 이메일 주소 확인 : 이메일 주소의 기본적인 패턴을 확인하는 정규 표현식

 

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b

 

  • \b: 단어 경계를 나타냄
  • [A-Za-z0-9._%+-]: 이메일의 사용자 부분에서 허용되는 문자
  • @: "@" 문자
  • [A-Za-z0-9.-]: 도메인 이름에서 허용되는 문자
  • \.: 마침표 문자
  • [A-Za-z]{2,}: 2글자 이상의 도메인 확장자

2. 전화번호 확인 (한국 전화번호) : 한국 전화번호 형식에 맞는 정규 표현식

^\d{2,3}-\d{3,4}-\d{4}$

 

  • ^: 문자열의 시작
  • \d{2,3}: 2~3자리 숫자 (국번)
  • -: 하이픈
  • \d{3,4}: 3~4자리 숫자 (중간 번호)
  • -: 하이픈
  • \d{4}: 4자리 숫자 (끝 번호)
  • $: 문자열의 끝

3. URL 추출: URL을 찾는 정규 표현식

https?://[A-Za-z0-9.-]+(?:/[A-Za-z0-9&%_=+./-]*)?

 

 

 

  • https?: "http" 또는 "https"와 일치
  • ://: "://" 문자열
  • [A-Za-z0-9.-]+: 도메인 이름
  • (?:/[A-Za-z0-9&%_=+./-]*)?: 선택적 경로 (슬래시로 시작하며 다양한 문자 포함 가능)

다시 내용을 정리해보겠다.

정규 표현식은 특정 문자열을 찾거나 변환하는 데 매우 유용한 도구다. 복잡한 패턴을 정의하여 텍스트를 처리할 수 있기 때문에 데이터 분석, 웹 크롤링, 로그 파일 분석 등에서 자주 사용된다. 정규 표현식은 다소 복잡하지만, 익숙해지면 강력한 텍스트 처리 도구가 된다.

 

'AI 부트캠프 > 챕터3(11.08~12.04)' 카테고리의 다른 글

TIL 43 도전 과제  (2) 2024.11.19
TIL 42  (1) 2024.11.18
TIL 40  (2) 2024.11.16
WIL 6  (0) 2024.11.15
TIL 39 필수 과제  (0) 2024.11.15