특정 범위 문자열을 제거하려면?
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)