구분자 여러개로 string to list

이고은·2021년 8월 24일
2

Python

목록 보기
2/4

Python의 string 내장함수인 split을 사용하면 구분자를 기준으로 string을 list로 나눌 수 있다.

str = "hi hello my name is highgrace"
str = str.split()
print(str)
# ['hi', 'hello', 'my', 'name', 'is', 'highgrace']

str = "hi, hello, my name is highgrace"
str = str.split(',')
print(str)
# ['hi', ' hello', ' my name is highgrace']

하지만 알고리즘 문제를 풀다보니 여러개의 구분자로 string을 list로 split해야하는 경우가 생겼다.

이와 같은 경우에는 re library를 사용하면 해결할 수 있다.
re library는 정규표현식에 관련된 파이썬 표준 라이브러리로, 잘 알아두면 활용도가 높다!

"100-200*300-500+20"로 주어졌을 때,
'+, -, * '를 기준으로 list로 나누고자 한다고 하자.

expression = "100-200*300-500+20"
print (re.split('[+|-|*]', expression))
# ['100-200', '300-500', '20'] ??

아직 이유를 모르겠지만.. 위와같이 작성할 경우 -를 인식하지 못했다..

print (re.split('[-|+|*]', expression))
# ['100', '200', '300', '500', '20']

+와 -의 자리를 바꾸었더니 해결이 되었다..
정말 이유가 무엇일까요.. 궁금하네요😯

만약 -, +, *의 구분자도 함께 리스트로 만들고 싶다면 reg 부분에 괄호를 쳐주면 된다.
참고

expression = re.split('([-|+|*])', expression)
print(expression)
# ['100', '-', '200', '*', '300', '-', '500', '+', '20']
profile
MLOps Engineer가 되고싶은 ML과 DevOps에 관심이 많은 컴공생입니다👩🏻‍💻

1개의 댓글

comment-user-thumbnail
2022년 2월 20일

안녕하세요 저도 같은 문제로 고민한 적이 있어 답변 드립니다!

(-) 같은 경우 [] 안에 있으면 [a-z] or [0-9] 와 같은 연속적인 값들을 나타내기 위한 줄임 용도로 사용하기에 의미의 혼동이 있을 듯 하네요!

답글 달기