정규표현식 TypeError : expected string or bytes-like object

반응형
    반응형

    파이썬에서 정규표현식을 썼는데 TypeError : expected string or bytes-like object 라는 오류가 뜨는 경우가 있습니다.

    이 오류가 뜨는 이유는 정규표현식은 문자열에서만 가능하기 때문에 그렇습니다.

    찾는 대상이 문자열이어야 하는데 그렇지 않다고 오류가 나오는 것입니다.

    원인이 명확하니 해결방법도 간단합니다. 대상을 문자열로 바꿔주면 됩니다.
    이메일을 찾는 정규표현식으로 예를 들겠습니다.
    아래와 같이 코드에는 email 리스트가 안에 2개의 이메일이 있습니다.
    re_email 로 이메일을 찾는 정규표현식을 만들어 search를 실행하니 에러가 뜰겁니다.

    왜냐하면 email은 문자열이 아니기 때문입니다.

     

    email = ['a','b','asdf@gmail.com','ewqr@naver.com']
    re_email = r"[a-z]+@[a-z]+.[a-z]+"
    re.search(re_email,email)

    2개의 이메일을 모두 찾고 싶기 때문에 for문을 돌리거나 리스트를 문자열로 바꿔줘서 해결을 합니다.

     

    for문을 이용한 방법

    for문을 돌리면서 확인부터 하겠습니다.
    각 리스트마다 이메일 형식을 추출합니다.

     

    for i in email:
        try:
            print(re.search(re_email,i).group())
        except:
            print(re.search(re_email,i))

    group은 매치가 안 된 문자열(Nontype)에 대해서 오류가 생기므로 예외처리를 했습니다.

     

    리스트를 문자열로 변환

    리스트를 문자열로 변환해서 찾아냅니다.

     

    string = ', '.join(email)
    string

     

    쉼표(,) 로 구분해서 리스트를 문자열로 변환하였습니다.
    이제 정규표현식을 적용해봅시다.
    2개가 나오므로 findall을 이용해 리스트로 반환하겠습니다.

     

    re.findall(re_email,string)

    잘 정리되서 나온 것을 볼 수 있습니다.

    댓글

    Designed by JB FACTORY

    ....