파이썬 '['부터 ']'까지의 특정 범위 문자열 제거하기

특정 범위 문자열을 제거하려면?

str = """
[한국인] 안녕하세요 
[일본인] 안녕하세요 
[중국인] 처음뵙겠습니다
"""

str변수에는 각국의 나라 사람들의 대화 내용이 담겨있습니다.

대화내용 앞에는 대괄호 안에 어떤 국적의 사람이 말을 하고 있는지 담겨있는데 여기서 국적을 제외하고 대화내용만 저장하려면 어떻게 해야 할까요?

 

 

출력예시

str = """
안녕하세요 
안녕하세요 
처음뵙겠습니다
"""

위의 예제처럼 출력을 하려면 기존의 문자열에서 '[' 문자와 ']' 문자를 find함수를 통해서 찾고 '['부터 ']'의 문자열을 while문을 사용하여 지워주면 됩니다.

 

 

문자열 찾기

    left_index = str.find('[')  # 문자가 존재하면 = return index 문자위치
    right_index = str.find(']') # 문자가 존재하지 않는다면 = return -1

left_index와 right_index 변수를 생성한 뒤 find함수를 통하여 각 문자열을 찾아줍니다.

 

    if left_index != -1 and right_index != -1:
        str = str[:left_index] + str[right_index + 1:]
    else:
        break

left_index와 right_index에 해당하는 문자열을 찾지 못할 경우 -1 값이 담기게 됩니다.

해당 조건문에서는 -1 대신 찾고자 하는 문자열의 인덱스값이 들어가 있는 경우 즉 '[' 나 ']'문자를 찾아서 인덱스위치가 담겨있는 경우에만 if문이 작동하여 문자 앞 뒤를 자른 뒤 나머지 문자열을 합쳐줍니다.

만약 찾고자하는 문자열을 하나라도 찾지 못했을 경우에는 if문이 중단됩니다.

 

 

다른 문자열 작동 예시

str_example = "안녕하세요 [첫번째 텍스트] 반갑습니다"

left_index = 6
right_index = 14

예를 들어 위의 문자열에서는 인덱싱슬라이스를 사용하여 (:left_index)  '['의 전 문자열 "안녕하세요" +  (right_index+1:]  ']'의 후 문자열+1(문자열의 위치는 0부터 시작하므로) "반갑습니다"를 합쳐서 "안녕하세요 반갑습니다"라는 문자열로 새로 저장됩니다.

 

 

전체 예제코드

str = str = """
[한국인] 안녕하세요 
[일본인] 안녕하세요 
[중국인] 처음뵙겠습니다
"""

while True:
    left_index = str.find('[')
    right_index = str.find(']')
    
    if left_index != -1 and right_index != -1:
        a = a[:left_index] + a[right_index + 1:]
    else:
        break

path = "result.txt"
with open(path, 'w') as f:
    f.write(str)

 

 

Top