• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    해결됨

지겹지만 정규표현식에 대한 전처리 질문드립니다.

21.06.19 00:50 작성 조회수 213

1

정규표현식에서 전처리할 때,

선생님이 가르쳐 주신 코드는 약간 이해가 안되서 다른 개발자들 블로그를 검색하다가 아래와 같은 방식을 발견하고 사용해보니 선생님과 동일한 결과 값이 나오네요..

gym = re.sub('[0-9-=+#/\?:^$.@nan]','',gym)

위와 같은 코드와 선생님이 쓰신 코드의 차이점은 무엇인가요???

gym = re.sub("[\[\d\-nan\]]","",gym)

답변 1

답변을 작성해보세요.

1

안녕하세요.

수업에서 사용한 정규표현식은 다음의 문자들을 전처리 하기 위해 사용되었습니다.

[,4,,,,7,,,nan,,,8,,,,5,,,,6,,,,3,,,,10,,,,14,,,,9,,,,30,,,,2,,,,13,,,,12,,,,40,,,,17,,,,-,,,,농구장,,,,궁도장,,,,풋살구장,,,,풋살구장,,농구장,,인라인스케이트장,,,,축구장,,,,족구장,,,,게이트볼장,,,,운동기구14개,,농구장2개소,,족구장1개소,,,,운동기구6개,,족구장1개소,,,,운동기구10개,,,,운동기구4개,,,,운동기구7개,,,,에어로빅장,,농구장,,,,테니스장,,씨름장,,농구장,,,,바디싣업1,스트레칭롤러1,전신돌리기1,허리안마기1,허리비틀기1,,,,TM스탭사이클1,TM체어웨이트1,TM트윈바디싣업1,TM트윈트위스트1,TM크로스컨트리1,TM풀웨이트1,,,,철봉1,,,,하늘걷기1,마라톤운동1,허리돌리기1,3단철봉,윗몸일으키기1,,,,철봉1,팔굽혀펴기1,몸통돌리기1,허리좌우로흔들기1,,,,스트레칭롤러1,풀웨이트1,바웨이트1,,,,하늘걷기1,온몸허리돌리기1,스트레칭기1,거꾸로매달리기1,,,,하늘걷기1,온몸허리돌리기1,등허리지압기1,철봉3,,,,스탭싸이클1,풀웨이트1,트리플트위스트2,트윈바디싣업1,크로스컨트리1,스트레칭롤러1,트윈워밍암1,,,,하늘걷기2,스탭싸이클1,체어폴1,철봉1,트리플트위스트2,트윈바디싣업1,,,,윗몸일으키기1,온몸허리돌리기1,팔굽혀펴기1,다리뻗치기1,온몸허리돌리기1,거꾸로매달리기1,,,,하늘걷기1,온몸허리돌리기1,옆파도타기1,,,,크로스워킹,스카이워킹1,파워프레스,풀웨이트1,싸이클론,트위스트1,스탠드업,마사지롤1,사이드스윙,터닝암1,푸시웨이트,레그프레스1,,,,평행봉1,,,,트윈바디싣업1,트윈트위스트1,스탭싸이클1,크로스컨트리1,체어풀1,,,,크로스컨트리1,자전거팔뻗기2,등안마기1,트윈워밍암1,체어웨이트1,오버턴스트레칭1,,,,크로스컨트리1,롤링웨이스트1,레그프레스1,트윈트위스트1,체어웨이트1,,,,족구장1,역기1,,,,등지압기1,마라톤운동,공중걷기운동1,허리돌리기,온몸돌리기1,,온몸역기올리기,온몸근육풀기1,,,,트리플트위스트1,트윈바디싣업1,크로스컨트

철봉1, 철봉2 이런식으로 철봉에 숫자가 붙어 있다면 빈도수를 세려고 할 때 콤마(,)로 구분해서 단어의 빈도수를 카운트 한다면 뒤에 숫자 때문에 철봉1과 철봉2가 다른 빈도수로 세어지기 때문에 이를 전처리 하는 과정에서 정규표현식을 사용했습니다.

[] 안에는 패턴을 사용합니다. 숫자는 0-9 로 쓸 수도 있지만 \d 로 사용할 수도 있습니다.

또 적어주신 내용은 숫자외에도 다른 특수문자를 찾도록 구현이 되어있습니다.

아래 표를 보시면 제가 사용했던 것처럼 숫자를 \d 로 쓸 수도 있지만 [0-9] 로 쓸 수도 있습니다.

알파벳 문자를 \a 로 쓸 수도 있지만 [A-Za-z] 로 사용할 수도 있습니다.

아래의 표는 위키에서 가져왔는데 아래 링크의 문서를 좀 더 참고해 보세요.

https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D

POSIX 비표준 펄/Tcl Vim ASCII 설명
[:alnum:] [A-Za-z0-9] 영숫자
[:word:] \w \w [A-Za-z0-9_] 영숫자 + "_"
\W \W [^A-Za-z0-9_] 낱말이 아닌 문자
[:alpha:] \a [A-Za-z] 알파벳 문자
[:blank:] \s \t] 공백과 탭
\b \< \> (?<=\W)(?=\w)|(?<=\w)(?=\W) 낱말 경계
[:cntrl:] [\x00-\x1F\x7F] 제어 문자
[:digit:] \d \d [0-9] 숫자
\D \D [^0-9] 숫자가 아닌 문자
[:graph:] [\x21-\x7E] 보이는 문자
[:lower:] \l [a-z] 소문자
[:print:] \p [\x20-\x7E] 보이는 문자 및 공백 문자
[:punct:] [][!"#$%&'()*+,./:;<=>?@\^_`{|}~-] 구두점
[:space:] \s \_s (단순히 줄 끝에 추가) \t\r\n\v\f] 공백 문자
\S [^ \t\r\n\v\f] 공백이 아닌 모든 문자
[:upper:] \u [A-Z] 대문자
[:xdigit:] \x [A-Fa-f0-9] 16진수

감사합니다.