[파이썬] 정규 표현식의 매칭 결과 문자열 위치 찾기

정규 표현식은 문자열을 패턴으로 매칭하고 검색하는 강력한 도구입니다. 파이썬에서는 re 모듈을 사용하여 정규 표현식을 다룰 수 있습니다. 정규 표현식으로 매칭된 문자열의 위치를 찾는 방법에 대해 알아보겠습니다.

1. search() 함수를 사용한 문자열 매칭

정규 표현식으로 매칭된 문자열의 위치를 찾기 위해선 search() 함수를 사용할 수 있습니다. 이 함수는 첫 번째로 매칭된 문자열을 찾아주며, Match 객체를 반환합니다. 해당 객체에는 매칭된 문자열의 시작과 끝 위치를 알려주는 start()end() 메서드가 있습니다.

아래는 예제 코드입니다.

import re

pattern = r'apple'
text = 'I have an apple and a banana'

match = re.search(pattern, text)

if match:
    start_pos = match.start()
    end_pos = match.end()

    print(f"Match found: '{match.group()}' at positions {start_pos}-{end_pos}")
else:
    print("No match found")

위 코드는 'apple' 이라는 패턴과 'I have an apple and a banana' 라는 문자열을 비교합니다. re.search() 함수를 사용하여 첫 번째로 매칭된 문자열을 찾고, start()end() 메서드를 사용하여 매칭된 문자열의 시작과 끝 위치를 출력합니다.

예상 출력은 다음과 같습니다.

Match found: 'apple' at positions 9-13

2. finditer() 함수를 사용한 모든 매칭 결과 찾기

만약 텍스트에서 정규 표현식과 일치하는 모든 부분을 찾고 싶을 경우에는 finditer() 함수를 사용할 수 있습니다. 이 함수는 이터레이터를 반환하며, 각 매칭 결과에 대한 Match 객체를 순회하면서 매칭된 문자열의 위치를 찾을 수 있습니다.

import re

pattern = r'apple'
text = 'I have an apple and a banana. I love apples'

matches = re.finditer(pattern, text)

for match in matches:
    start_pos = match.start()
    end_pos = match.end()

    print(f"Match found: '{match.group()}' at positions {start_pos}-{end_pos}")

위 코드는 문자열 'apple'"I have an apple and a banana. I love apples"과 비교합니다. re.finditer() 함수를 사용하여 모든 매칭 결과를 찾고, 이후 for 루프를 통해 각 매칭 결과의 시작과 끝 위치를 출력합니다.

예상 출력은 다음과 같습니다.

Match found: 'apple' at positions 9-13
Match found: 'apple' at positions 29-33

결론

정규 표현식의 매칭 결과 문자열의 위치를 찾는 방법을 파이썬에서 알아보았습니다. search() 함수를 사용하면 첫 번째로 매칭된 문자열의 위치를 찾을 수 있고, finditer() 함수를 사용하면 모든 매칭 결과에 대한 위치를 찾을 수 있습니다. 이러한 기능을 활용하여 텍스트 처리와 검색 기능을 더욱 효과적으로 구현할 수 있습니다.

더 자세한 사항은 파이썬 공식 문서를 참조하십시오.