본문 바로가기

카테고리 없음

파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출

파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출

파이썬은 다양한 문자열 처리 기능을 제공하며, 그 중에서도 정규 표현식은 강력한 도구입니다. 정규 표현식은 특정 패턴을 정의하여 문자열에서 원하는 부분을 검색하고 추출하는 데 사용됩니다. 파이썬에서는 re 모듈을 통해 정규 표현식을 사용할 수 있습니다.

1. 정규 표현식 기초

파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출

정규 표현식은 특수 문자와 메타 문자를 사용하여 패턴을 표현합니다. 몇 가지 주요 메타 문자와 그 의미는 다음과 같습니다.

메타 문자 의미
. 임의의 단일 문자
* 이전 문자가 0번 이상 반복
+ 이전 문자가 1번 이상 반복
? 이전 문자가 0번 또는 1번 반복
^ 문자열의 시작
$ 문자열의 끝
[] 문자 집합
\d 숫자 (0-9)
\w 단어 문자 (숫자, 문자, 밑줄)
\s 공백 문자

예를 들어, \d+ 는 숫자 1개 이상을 나타내고, [a-z]+ 는 소문자 1개 이상을 나타냅니다.

2. re 모듈의 주요 함수

re 모듈은 정규 표현식을 사용하여 문자열을 처리하는 다양한 함수를 제공합니다.

  • re.findall(pattern, string) : 문자열에서 패턴과 일치하는 모든 부분 문자열을 리스트로 반환합니다.
  • re.search(pattern, string) : 문자열에서 패턴과 일치하는 첫 번째 부분 문자열을 찾아 Match 객체로 반환합니다.
  • re.match(pattern, string) : 문자열의 처음부터 패턴과 일치하는지 확인하고 Match 객체를 반환합니다.
  • re.sub(pattern, repl, string) : 문자열에서 패턴과 일치하는 부분 문자열을 repl로 대체합니다.
  • re.split(pattern, string) : 문자열을 패턴으로 분리하여 리스트로 반환합니다.

3. 정규 표현식 활용 예제

01234567891011121314

다음은 re 모듈을 사용하여 문자열을 처리하는 몇 가지 예제입니다.

1. 이메일 주소 추출

```python import re

text = "제 이메일 주소는 test@example.com입니다." email = re.findall(r'[\w.-]+@[\w.-]+.\w+', text) print(email) # ['test@example.com'] ```

2. 전화번호 추출

```python import re

text = "제 전화번호는 010-1234-5678입니다." phone = re.findall(r'\d{3}-\d{4}-\d{4}', text) print(phone) # ['010-1234-5678'] ```

3. 문자열 대체

```python import re

text = "파이썬은 강력한 프로그래밍 언어입니다." new_text = re.sub(r'파이썬', 'Python', text) print(new_text) # Python은 강력한 프로그래밍 언어입니다. ```

4. 문자열 분리

```python import re

text = "사과, 바나나, 딸기" fruits = re.split(r', ', text) print(fruits) # ['사과', '바나나', '딸기'] ```

4. 정규 표현식 활용 시 주의 사항

  • 정규 표현식은 복잡할 수 있으므로 이해하기 어려울 수 있습니다.
  • 정규 표현식은 잘못 사용하면 예상치 못한 결과를 초래할 수 있습니다.
  • re.compile() 함수를 사용하여 정규 표현식을 컴파일하면 성능을 향상시킬 수 있습니다.

5. 정규 표현식 학습 자료

파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출

정규 표현식은 파이썬에서 문자열을 처리하는 강력한 도구입니다. 위의 예제들을 참고하여 다양한 상황에 맞게 정규 표현식을 활용해 보세요.

자주하는질문(FAQ)

파이썬 정규 표현식: re 모듈을 이용한 문자열 검색 및 추출 FAQ

파이썬에서 정규 표현식 활용하기: re 모듈을 이용한 문자열 검색 및 추출

Q1. 정규 표현식이 뭔가요? 어떻게 사용하나요?

A: 정규 표현식 (Regular Expression)은 문자열 패턴을 표현하는 데 사용되는 특수 문자열입니다. 파이썬에서는 re 모듈을 사용하여 정규 표현식을 활용할 수 있습니다.

  • re.search(pattern, string) : 문자열에서 패턴과 일치하는 부분이 있는지 확인하고, 있다면 일치하는 부분을 나타내는 Match 객체를 반환합니다. 없다면 None 을 반환합니다.
  • re.findall(pattern, string) : 문자열에서 패턴과 일치하는 모든 부분을 리스트 형태로 반환합니다.
  • re.sub(pattern, replacement, string) : 문자열에서 패턴과 일치하는 부분을 replacement로 대체합니다.

예시:

```python import re

text = "My phone number is 123-456-7890" pattern = r"\d{3}-\d{3}-\d{4}"

match = re.search(pattern, text) if match: print(f"전화번호: {match.group(0)}")

phone_numbers = re.findall(pattern, text) print(f"전화번호 목록: {phone_numbers}")

new_text = re.sub(pattern, " - -****", text) print(f"변경된 문자열: {new_text}") ```

Q2. 특수 문자를 정규 표현식에서 어떻게 사용하나요?

A: 정규 표현식에서 특수 문자는 특별한 의미를 갖습니다. 예를 들어, . 은 임의의 문자 하나를 나타내고, * 는 앞 문자가 0번 이상 반복되는 것을 나타냅니다. 특수 문자를 그 자체로 사용하려면 백슬래시( \ )로 이스케이프해야 합니다.

  • . (점): 임의의 문자 하나와 매치
  • * (별표): 앞 문자가 0번 이상 반복되는 것을 나타냄
  • + (플러스): 앞 문자가 1번 이상 반복되는 것을 나타냄
  • ? (물음표): 앞 문자가 0번 또는 1번 반복되는 것을 나타냄
  • \d : 숫자와 매치
  • \s : 공백 문자와 매치
  • \w : 문자, 숫자, 언더스코어와 매치

예시:

```python import re

text = "This is a test 123" pattern = r"\d+" # 숫자 하나 이상

numbers = re.findall(pattern, text) print(f"숫자 목록: {numbers}") ```

Q3. 정규 표현식으로 문자열을 어떻게 분리하나요?

A: re.split(pattern, string) 함수를 사용하여 문자열을 정규 표현식으로 분리할 수 있습니다.

예시:

```python import re

text = "apple,banana,cherry" pattern = r","

fruits = re.split(pattern, text) print(f"과일 목록: {fruits}") ```

Q4. 정규 표현식에서 그룹을 어떻게 사용하나요?

A: 괄호( () )를 사용하여 정규 표현식에서 그룹을 만들 수 있습니다. 그룹은 패턴의 특정 부분을 나타내며, Match 객체의 group() 메서드를 사용하여 그룹에 해당하는 문자열을 추출할 수 있습니다.

예시:

```python import re

text = "My email address is test@example.com" pattern = r"(\w+)@(\w+).(\w+)"

match = re.search(pattern, text) if match: print(f"사용자 이름: {match.group(1)}") print(f"도메인: {match.group(2)}") print(f"최상위 도메인: {match.group(3)}") ```

Q5. 정규 표현식에서 플래그를 어떻게 사용하나요?

A: 정규 표현식에서 플래그는 패턴의 매칭 방식을 수정하는 데 사용됩니다. 플래그는 re.search() , re.findall() , re.sub() 함수에 두 번째 인수로 전달됩니다.

  • re.IGNORECASE : 대소문자 구분 없이 매칭합니다.
  • re.MULTILINE : 문자열을 여러 줄로 인식합니다.
  • re.DOTALL : . 이 줄 바꿈 문자( \n )까지 매칭하도록 합니다.

예시:

```python import re

text = "Hello World!" pattern = r"world"

match = re.search(pattern, text, re.IGNORECASE) if match: print(f"일치하는 부분: {match.group(0)}") ```

01234567891011121314