일반적으로 접할 수있는 모든 문장 부호가있는 목록이나 라이브러리가 있습니까?
일반적으로을 사용 string.punctuation
하지만 일부 문장 부호 문자는 포함되지 않습니다.
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
일반적으로 접할 수있는 모든 문장 부호가있는 목록이나 라이브러리가 있습니까?
일반적으로을 사용 string.punctuation
하지만 일부 문장 부호 문자는 포함되지 않습니다.
>>> "'" in string.punctuation
True
>>> "’" in string.punctuation
False
답변:
이 확인으로 더 잘 할 수 있습니다.
>>> import unicodedata
>>> unicodedata.category("'").startswith("P")
True
>>> unicodedata.category("’").startswith("P")
True
유니 코드 범주 P * 는 구두점 전용입니다 .
커넥터 (Pc), 대시 (Pd), 초기 견적 (Pi), 최종 견적 (Pf), 공개 (Ps), 닫기 (Pe), 기타 (Po)
빠른 회원 확인을 위해 사용할 수있는 철저한 수집을 준비하려면 다음과 같이 정해진 이해를 사용하십시오.
>>> import sys
>>> from unicodedata import category
>>> codepoints = range(sys.maxunicode + 1)
>>> punctuation = {c for i in codepoints if category(c := chr(i)).startswith("P")}
>>> "'" in punctuation
True
>>> "’" in punctuation
True
여기에 할당 표현식 은 이전 Python 버전과 동등한 Python 3.8 이상이 필요합니다.
chrs = (chr(i) for i in range(sys.maxunicode + 1))
punctuation = set(c for c in chrs if category(c).startswith("P"))
다른 문자 중 일부 string.punctuation
는 실제로는 유니 코드 범주 Symbol에 있습니다. 원하는 경우 추가하기도 쉽습니다.
$
), Sk (예 : 등 ^
), Sm (math, like +
또는 <
) 및 아마도 So (기타 ©
)가 포함됩니다.
정규 표현식 (정규 표현식)에 대한 직업처럼 보입니다.
import re
text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)
여기서 정규 표현식은 공백이나 단어 문자를 제외한 모든 문자와 일치합니다. 이 플래그 re.UNICODE
는 전체 유니 코드 문자 집합을 일치시키는 데 사용됩니다.
>>> text="Den som dræber - fanget" >>> re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE) 'Den som dr\xc3ber fanget'
\xc3
이스케이프는 문장 부호 제거와 관련이없는 표현입니다).
\xc3
는 올바른 유니 코드 인코딩이 아닙니다 æ
. 입력 str(text)
하면임을 확인할 수 있습니다 \xc3\xa6
. 실제로 \xc3
완전한 코드 포인트가 아닌 것 같습니다.
str
바이트 문자열이있는 Python 2를 사용하고있는 것 같습니다 . 유니 코드는 Py2에서 악몽이기 때문에 반드시 Python 3으로 전환해야합니다. 나를 위해, str('æ')
같은 쇼 'æ'
, 그리고 ascii('æ')
쇼로 '\xe6'
올바른 코드 포인트이다. b'\xc3\xa6'
의 UTF-8 인코딩 'æ'
이지만 일반적으로 사용하려는 것은 아닙니다.
다른 답변에서 지적 했듯이이 작업을 수행하는 방법은 유니 코드 속성 / 범주를 사용하는 것입니다. 허용되는 답변 은 표준 라이브러리 unicodedata
모듈을 통해이 정보에 액세스 하지만 필요한 상황에 따라 정규식을 사용하여 동일한 속성 정보에 액세스하는 것이 더 빠르거나 더 편리 할 수 있습니다.
그러나 표준 라이브러리 re
모듈 은 확장 유니 코드 지원을 제공하지 않습니다. 이를 위해서는 PyPI ( ) 에서 사용할 수 있는 regex
모듈 이 필요합니다 pip install regex
.
>>> import regex as re
>>> re.match("\p{Punctuation}", "'")
<regex.Match object; span=(0, 1), match="'">
>>> re.match("\p{Punctuation}", "’")
<regex.Match object; span=(0, 1), match='’'>
정규식을 사용하여 검색 할 수있는 모든 종류의 유니 코드 속성에 대한 개요가 여기 에 제공 됩니다 . PyPI 홈페이지에 문서화되어있는 이러한 추가 정규식 기능 외에도 regex
의도적으로와 동일한 API를 제공 re
하므로 re
의 설명서를 사용하여 이들 중 하나를 사용하는 방법을 알아낼 것으로 예상됩니다 .