[파이썬] 특정 문자열의 다음 문자열을 추출하는 방법

조회수 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']
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)