파이썬 한자, 로마자를 어떻게 골라낼 수 있을까요?
조회수 2282회
isalnum과 같이 간편하게 문자열에서 한자와 β 같은 로마자를 제외하는 방법을 알고 싶습니다.
예시
'가나다-aβbc-123 김家네 김밥' => '가나다 a bc 123 김네 김밥'
또는
'가나다-aβbc-123 김家네 김밥' => '가나다 a bc 123 김 네 김밥'
또는
'가나다-aβbc-123 김家네 김밥' => '가나다abc123김네김밥'
문장 또는 문구에서 한글, 영어, 숫자를 추출하려고 했는데, 처음에는 filter와 isalnum 을 이용해서 추출해보려 했습니다.
그런데 특수문자로 분류되는 줄 알았던 한자와 로마자 모두 True를 반환하고 있어 헤메고 있습니다.
2 답변
-
import re a = '가나다-aβbc-123 김家네 김밥' t = re.sub('[^a-zA-Z0-9ㄱ-ㅣ가-힣]','',a) '가나다abc123김네김밥'
-
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> s = "가나다-aβbc-123 김家네 김밥" >>> import unicodedata >>> for c in s: print(c, unicodedata.name(c)) 가 HANGUL SYLLABLE GA 나 HANGUL SYLLABLE NA 다 HANGUL SYLLABLE DA - HYPHEN-MINUS a LATIN SMALL LETTER A β GREEK SMALL LETTER BETA b LATIN SMALL LETTER B c LATIN SMALL LETTER C - HYPHEN-MINUS 1 DIGIT ONE 2 DIGIT TWO 3 DIGIT THREE SPACE 김 HANGUL SYLLABLE GIM 家 CJK UNIFIED IDEOGRAPH-5BB6 네 HANGUL SYLLABLE NE SPACE 김 HANGUL SYLLABLE GIM 밥 HANGUL SYLLABLE BAB >>> for c in s: print(c, unicodedata.name(c), c.isalpha()) 가 HANGUL SYLLABLE GA True 나 HANGUL SYLLABLE NA True 다 HANGUL SYLLABLE DA True - HYPHEN-MINUS False a LATIN SMALL LETTER A True β GREEK SMALL LETTER BETA True b LATIN SMALL LETTER B True c LATIN SMALL LETTER C True - HYPHEN-MINUS False 1 DIGIT ONE False 2 DIGIT TWO False 3 DIGIT THREE False SPACE False 김 HANGUL SYLLABLE GIM True 家 CJK UNIFIED IDEOGRAPH-5BB6 True 네 HANGUL SYLLABLE NE True SPACE False 김 HANGUL SYLLABLE GIM True 밥 HANGUL SYLLABLE BAB True >>> s '가나다-aβbc-123 김家네 김밥' >>> def filterout_hanja_greek(s): r = "" for c in s: if not c.isalpha(): r += c continue unicodename = unicodedata.name(c) if unicodename.startswith("GREEK") or unicodename.startswith("CJK"): continue r += c return r >>> filterout_hanja_greek(s) '가나다-abc-123 김네 김밥' >>>
unicodedata 를 이용하면, 문자의 유니코드 이름을 알아낼 수 있는데, 이 이름의 첫부분이 어떤 문자인지를 나타냅니다. 이를 이용하여, 특정 문자를 제거할 수 있습니다.
한자를 한글로 바꾸어주거나 하는 기능을 가진 hanja 라는 패키지도 있습니다.
댓글 입력