[파이썬] 특정 문자열의 다음 문자열을 추출하는 방법
조회수 425회
엑셀에서 불러온 문자열입니다.
Member||*NAYEON||*0.00||*0000036$$Member||*JEONGYEON||*0.00||*0000037$$Member||*MOMO||*0.00||*0000038$$Member||*SANA||*0.00||*0000039$$Member||*JIHYO||*0.00||*0000040$$Member||*MINA||*0.00||Member||*DAHYUN||*0.00||*0000041$$Member||*CHAEYOUNG||*0.00||*0000042$$Member||*TZUYU||*0.00||*0000043$$'
여기서 특정단어(트와이스 멤버 이름) 만 추출하고 싶습니다.
그래서 split 을 통해 문자열을 잘라주었고, 특정 반복값 "0.00" 을 기준으로 값을 가져오려고 했습니다.
s = 'Member||*NAYEON||*0.00||*0000036$$Member||*JEONGYEON||*0.00||*0000037$$Member||*MOMO||*0.00||*0000038$$Member||*SANA||*0.00||*0000039$$Member||*JIHYO||*0.00||*0000040$$Member||*MINA||*0.00||Member||*DAHYUN||*0.00||*0000041$$Member||*CHAEYOUNG||*0.00||*0000042$$Member||*TZUYU||*0.00||*0000043$$'
s2 = s.split("||*")
s3 = s2[s2.index("0.00")-1]
그러면 값이 제일 첫번째 "0.00" 앞의 NAYEON 밖에 가져와 지지 않습니다.. ㅠㅠ 나머지 모든 멤버 이름을 가져오려면 어떻게 해야 할까요?
감사합니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
방법1: index
질문자님이 사용하신 index 메서드는 일치하는 하나의 인덱스만을 가져오고, 가져올 것이 없으면
ValueError
예외를 일으킵니다. 연속으로 가져오기 위해서는 다음과 같아야 합니다.s3 = [] start = 0 while True: try: start = s2.index('0.00', start + 1) except ValueError: break else: s3.append(s2[start - 1]) print(s3) # ['NAYEON', 'JEONGYEON', 'MOMO', 'SANA', 'JIHYO', 'DAHYUN', 'CHAEYOUNG', 'TZUYU']
index
를 이용할 경우 예외처리 구문에 의해 코드가 좀 더 길어지는데, 가독성이 훌륭한 것도 아닙니다.방법2: List comprehension
리스트 컴프리헨션으로 한 줄로
s3
를 한 줄로 작성할 수 있습니다.s3 = [s2[i-1] for i, v in enumerate(s2) if v == '0.00'] # ['NAYEON', 'JEONGYEON', 'MOMO', 'SANA', 'JIHYO', 'MINA', 'DAHYUN', 'CHAEYOUNG', 'TZUYU']
방법3: Regular expression
특정 문자열 패턴을 추출하는 것은 정규식 사용을 충분히 고려해볼만 합니다.
질문자님이 원하시는대로특정 반복값 "0.00" 을 기준으로 값을 가져오려고 했습니다.
이것을 정규표현식으로 옮기면 아래와 같습니다.
import re re.findall(r"(\w+)\|{2}\*0\.00", s) # ['NAYEON', 'JEONGYEON', 'MOMO', 'SANA', 'JIHYO', 'MINA', 'DAHYUN', 'CHAEYOUNG', 'TZUYU']
댓글 입력