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

정규 표현식은 문자열에서 특정 패턴을 찾는데에 사용되는 강력한 도구입니다. 매칭 결과를 찾는 것 외에도, 매칭된 문자열의 위치도 알고 싶을 수 있습니다. Python에서는 re 모듈을 사용하여 정규 표현식의 매칭 결과 문자열 위치를 확인할 수 있습니다.

문자열 위치 확인하기

re 모듈의 search 함수를 사용하여 정규 표현식을 문자열에 매칭시키면, 매칭된 문자열 객체가 반환됩니다. 이 객체에는 매칭된 문자열의 시작과 끝 위치를 확인할 수 있는 start()end() 메서드가 제공됩니다.

다음은 간단한 예제입니다. 우리는 “apple”이라는 단어를 매칭시킬 것입니다.

import re

# 문자열과 패턴 정의
text = "I have an apple."

# 정규 표현식 매칭
pattern = "apple"
match = re.search(pattern, text)

# 매칭된 문자열의 위치 확인
if match:
    start = match.start()
    end = match.end()
    print(f"매칭된 문자열 위치: {start}-{end}")
else:
    print("매칭되는 문자열이 없습니다.")

위의 코드는 “apple”이라는 단어가 “I have an apple.” 문자열에 매칭되는지 확인합니다. 매칭된 경우, 문자열의 시작 위치와 끝 위치를 출력합니다. 이 예제에서는 “apple”이 11번째 문자부터 15번째 문자까지 매칭되었기 때문에, “매칭된 문자열 위치: 11-15”가 출력됩니다.

여러 개의 매칭 결과 확인하기

정규 표현식에 매칭된 모든 결과를 확인하려면, finditer() 함수를 사용할 수 있습니다. 이 함수는 매칭 결과를 순회 가능한 객체로 반환합니다. 각 매칭 결과 객체는 start()end() 메서드를 사용하여 문자열 위치를 확인할 수 있습니다.

다음은 여러 개의 매칭 결과를 확인하는 예제입니다.

import re

# 문자열과 패턴 정의
text = "I have an apple, an orange, and a banana."

# 정규 표현식 매칭
pattern = r"an \w+"
matches = re.finditer(pattern, text)

# 매칭된 문자열의 위치 확인
for match in matches:
    start = match.start()
    end = match.end()
    print(f"매칭된 문자열 위치: {start}-{end}")

위의 코드는 “an”으로 시작하는 단어들을 매칭시키는 예제입니다. “an”으로 시작하는 단어들이 여러 개 있기 때문에, finditer() 함수를 사용하여 모든 매칭 결과를 확인합니다. 각 매칭 결과 객체의 start()end() 메서드를 사용하여 각 단어의 위치를 출력합니다.

결과

실행 예시에 따라 다르지만, 위의 예제 코드를 실행하면 다음과 같은 결과가 출력됩니다:

매칭된 문자열 위치: 7-13
매칭된 문자열 위치: 16-23
매칭된 문자열 위치: 28-35

위의 출력에서, 첫 번째 매칭된 문자열 “an apple”은 7번째 문자부터 13번째 문자까지 있습니다. 두 번째 매칭된 문자열 “an orange”은 16번째 문자부터 23번째 문자까지 있습니다. 세 번째 매칭된 문자열 “an banana”은 28번째 문자부터 35번째 문자까지 있습니다.

결론

Python의 re 모듈을 사용하여 정규 표현식의 매칭 결과 문자열 위치를 확인할 수 있습니다. 이를 통해 특정 패턴이나 단어가 문자열에서 어디에 위치하는지 확인할 수 있습니다. 이를 활용하여 문자열 처리 또는 텍스트 분석 작업을 수행할 때 도움을 받을 수 있습니다.