Home » 레퍼런스 » PYTHON » python split 함수를 알아보고 구분자 여러개일 때에도 처리해 봅시다.

python split 함수를 알아보고 구분자 여러개일 때에도 처리해 봅시다.

python에서 split 함수는 특정한 구분 문자열을 기준으로 token으로 분리할 때 쓰입니다. 어떻게 쓰는지 간단하게 알아보도록 하겠습니다.


[그림 1] 예제 1번 프로그램

먼저 예제 1번 프로그램을 보겠습니다. 문자열 하나를 line 단위로 하나 입력 받으면 split 함수로 분리합니다. 그런데 아무런 인자도 없습니다. 어떻게 분리가 될까요? 잠깐 split의 설명을 보겠습니다.

보시면, seperator가 나와 있어요. 예제 1번은 이 sep가 None인데요. None인 경우, white space 문자를 기준으로 분리합니다. 예를 들자면, 공백, 탭과 같은 문자들을 seperator로 이용하겠다는 것입니다.

[그림 2] 예제 1번 프로그램의 결과

저는 “a bc dd e f”를 입력했어요. a 다음에 공백 문자가 옵니다. 그리고 bc 다음에 탭 문자가 오고, dd 다음에 공백 문자, e 다음에 공백 문자가 오고 f가 옵니다. 공백 문자와 탭 문자는 white space 문자이므로, 이들을 분할 기준으로 삼아서 토큰화 시킵니다. 따라서, “a”, “bc”, “dd”, “e”, “f”가 나오게 됩니다.

[그림 3] seperator가 “ab”인 예제 2번 프로그램

이제 seperator가 “ab”인 경우를 봅시다. 이 경우에는 결과가 어떻게 나올까요?

[그림 4] 예제 2번 프로그램의 결과

“cccabcccacccbccc”를 입력하였습니다. 그랬더니, “ccc”, “cccacccbccc”로 분리되었습니다. 제가 의도했던 것은 seperator로 “a”, “b”가 인식되어서, 4개의 토큰으로 분리된 것입니다. 왜 “ccc”, “”, “ccc”, “ccc”, “ccc”로 분리되지 않았을까요? 이는 seperator로 “a”와 “b”를 쓴 것이 아니라, “ab”를 썼기 때문입니다. 즉 “ab”를 구분하는 기준으로 삼은 것입니다. 이를 그림으로 도식화 시키면 아래와 같아요.

문자열을 왼쪽부터 오른쪽으로 읽어봅시다. 그러면 4번째 위치에 정확하게 “ab”와 매치되는 것이 있음을 알 수 있어요. 고로, “ccc”가 하나 끊어집니다.

문제는 6번째 위치부터 “ab”와 일치하는 부분이 없다는 것입니다. 따라서 “cccacccb…” 부분이 분리되게 됩니다.


seperator로 “a”와 “b”를 동시에 주는 방법은 없을까요? python split 함수를 쓸 때 구분자 여러 개를 어떻게 주어야 할까요?

[그림 5] “a”도 “b”도 “$”로 바꾼 예제 3번 프로그램

seperator로 쓸 문자를 특정한 문자로 바꿉니다. 예를 들어, 예제 3번은 “a”와 “b”를 “$”로 바꿉니다. 이제 “$”, 즉 특정한 문자를 기준으로 split를 하면 됩니다. 결과를 보겠습니다.

[그림 6] 예제 3번 프로그램의 결과

아까와는 다르게 “ccc”, “”, “ccc”, “ccc”, “ccc”로 분리되었음을 볼 수 있습니다. 이 방법은

  • 특수한 패턴을 하나의 문자로 치환합니다.
  • 치환한 문자를 가지고 split를 합니다.

이 두 단계를 거쳤음을 알 수 있습니다. 나쁜 방법이 아닙니다. 하지만, 코드가 지저분해 보입니다. 다행히도, 파이썬에는 re 모듈의 split가 있습니다.

[그림 7] re 모듈을 이용한 예제 4번 프로그램

re.split은 1번째 인자로 패턴을, 2번째 인자로 target 문자열을 넣습니다. 1번째에 패턴 “[ab]”가 왔는데요. 문자 a 또는 b라는 의미입니다. 이를 기준으로 분리한다는 것입니다.

[그림 8] 예제 4번 프로그램의 결과

결과를 봅시다. “cccacccabcccc”를 넣었을 때, “ccc”, “ccc”, “”, “cccc”가 나옴을 볼 수 있어요. 이것 역시 구분자 “a” 또는 구분자 “b”로 분리했음을 의미합니다. 정리하면 구분자 여러개를 쓰고 싶을 때에는, re 모듈의 split를 사용해서 분리하면 됩니다.

Leave a Comment

20 − 11 =