python에서 split 함수는 특정한 구분 문자열을 기준으로 token으로 분리할 때 쓰입니다. 어떻게 쓰는지 간단하게 알아보도록 하겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp1.png)
먼저 예제 1번 프로그램을 보겠습니다. 문자열 하나를 line 단위로 하나 입력 받으면 split 함수로 분리합니다. 그런데 아무런 인자도 없습니다. 어떻게 분리가 될까요? 잠깐 split의 설명을 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp9.png)
보시면, seperator가 나와 있어요. 예제 1번은 이 sep가 None인데요. None인 경우, white space 문자를 기준으로 분리합니다. 예를 들자면, 공백, 탭과 같은 문자들을 seperator로 이용하겠다는 것입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp2.png)
저는 “a bc dd e f”를 입력했어요. a 다음에 공백 문자가 옵니다. 그리고 bc 다음에 탭 문자가 오고, dd 다음에 공백 문자, e 다음에 공백 문자가 오고 f가 옵니다. 공백 문자와 탭 문자는 white space 문자이므로, 이들을 분할 기준으로 삼아서 토큰화 시킵니다. 따라서, “a”, “bc”, “dd”, “e”, “f”가 나오게 됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp3.png)
이제 seperator가 “ab”인 경우를 봅시다. 이 경우에는 결과가 어떻게 나올까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp4.png)
“cccabcccacccbccc”를 입력하였습니다. 그랬더니, “ccc”, “cccacccbccc”로 분리되었습니다. 제가 의도했던 것은 seperator로 “a”, “b”가 인식되어서, 4개의 토큰으로 분리된 것입니다. 왜 “ccc”, “”, “ccc”, “ccc”, “ccc”로 분리되지 않았을까요? 이는 seperator로 “a”와 “b”를 쓴 것이 아니라, “ab”를 썼기 때문입니다. 즉 “ab”를 구분하는 기준으로 삼은 것입니다. 이를 그림으로 도식화 시키면 아래와 같아요.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp10.png)
문자열을 왼쪽부터 오른쪽으로 읽어봅시다. 그러면 4번째 위치에 정확하게 “ab”와 매치되는 것이 있음을 알 수 있어요. 고로, “ccc”가 하나 끊어집니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp11.png)
문제는 6번째 위치부터 “ab”와 일치하는 부분이 없다는 것입니다. 따라서 “cccacccb…” 부분이 분리되게 됩니다.
seperator로 “a”와 “b”를 동시에 주는 방법은 없을까요? python split 함수를 쓸 때 구분자 여러 개를 어떻게 주어야 할까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp5.png)
seperator로 쓸 문자를 특정한 문자로 바꿉니다. 예를 들어, 예제 3번은 “a”와 “b”를 “$”로 바꿉니다. 이제 “$”, 즉 특정한 문자를 기준으로 split를 하면 됩니다. 결과를 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp6.png)
아까와는 다르게 “ccc”, “”, “ccc”, “ccc”, “ccc”로 분리되었음을 볼 수 있습니다. 이 방법은
- 특수한 패턴을 하나의 문자로 치환합니다.
- 치환한 문자를 가지고 split를 합니다.
이 두 단계를 거쳤음을 알 수 있습니다. 나쁜 방법이 아닙니다. 하지만, 코드가 지저분해 보입니다. 다행히도, 파이썬에는 re 모듈의 split가 있습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp7.png)
re.split은 1번째 인자로 패턴을, 2번째 인자로 target 문자열을 넣습니다. 1번째에 패턴 “[ab]”가 왔는데요. 문자 a 또는 b라는 의미입니다. 이를 기준으로 분리한다는 것입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/py_sp8.png)
결과를 봅시다. “cccacccabcccc”를 넣었을 때, “ccc”, “ccc”, “”, “cccc”가 나옴을 볼 수 있어요. 이것 역시 구분자 “a” 또는 구분자 “b”로 분리했음을 의미합니다. 정리하면 구분자 여러개를 쓰고 싶을 때에는, re 모듈의 split를 사용해서 분리하면 됩니다.