43.2.5 특수 문자 판단하기에서 \w에 대해 질문있습니다.
, 이 강토님이 작성\w: [a-zA-Z0-9_]와 같음. 영문 대소문자, 숫자, 밑줄 문자
라고 하셨는데 python 3.8에서 돌렸을때 \w에서 한글이 매칭이 되는데 파이썬 버전차이때문에 그런 것일까요?
Re: 43.2.5 특수 문자 판단하기에서 \w에 대해 질문있습니다.
, 도장_ 관리자님이 작성파이썬은 기본적으로 유니코드 매칭을 합니다.
\w는 word(단어) 단위로 매칭하는 것입니다. 유니코드에서 단어이면 매칭이 됩니다.
유니코드를 지원하지 않거나 유니코드 이전에 만들어진 프로그래밍 언어는 \w에 대해서 유니코드가 아니라 ASCII 매칭을 합니다. 즉, 통상적으로는 A-Za-z0-9_와 같습니다.
>>> re.match('\w+', 'Hello_1234')
<re.Match object; span=(0, 10), match='Hello_1234'>
>>> re.match('\w+', '한글_1234')
<re.Match object; span=(0, 7), match='한글_1234'>
파이썬은 유니코드 매칭을 하기 때문에 '한글_1234'도 매칭이 잘 됩니다.
그러나 ASCII 매칭으로 하고 싶다면 re.ASCII 옵션을 지정할 수 있습니다.
>>> re.match('\w+', 'Hello_1234', re.ASCII)
<re.Match object; span=(0, 10), match='Hello_1234'>
>>> re.match('\w+', '한글_1234', re.ASCII)
re.ASCII 옵션을 지정하면 한글은 아스키 문자가 아니므로 매칭이 되지 않습니다.
\w는 단어 단위 매칭이지만, 파이썬에서의 단어 매칭은 유니코드 기준이어서 한국어도 매칭이 됩니다. 그러나 다른 언어에서는 유니코드가 기본이 아니므로 매칭 여부는 직접 확인해야 합니다.