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']
안녕하세요 저도 같은 문제로 고민한 적이 있어 답변 드립니다!
(-) 같은 경우 [] 안에 있으면 [a-z] or [0-9] 와 같은 연속적인 값들을 나타내기 위한 줄임 용도로 사용하기에 의미의 혼동이 있을 듯 하네요!