[python] Python에 대한 완전한 문장 부호 세트 (ASCII뿐만 아니라)

일반적으로 접할 수있는 모든 문장 부호가있는 목록이나 라이브러리가 있습니까?

일반적으로을 사용 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에 있습니다. 원하는 경우 추가하기도 쉽습니다.


답변

문자가 문장 부호 문자인지 확인하려면 wim게시 한 답변 이 정확합니다.

질문 제목에서 알 수 있듯이 모든 문장 부호 문자 목록이 실제로 필요한 경우 다음을 사용할 수 있습니다.

import sys
from unicodedata import category
punctuation_chars =  [chr(i) for i in range(sys.maxunicode)
                             if category(chr(i)).startswith("P")]


답변

wim의 대답 은 함수를 사용하도록 코드를 변경할 수 있다면 좋습니다.

그러나 in연산자 를 사용해야하는 경우 (예 : 라이브러리 코드를 호출하는 경우) 오리 입력을 사용할 수 있습니다.

import unicodedata
class DuckType:
    def __contains__(self,s):
        return unicodedata.category(s).startswith("P")
punct=DuckType()
#print("'" in punct,'"' in punct,"a" in punct)


답변

정규 표현식 (정규 표현식)에 대한 직업처럼 보입니다.

    import re
    text = re.sub(r"[^\w\s]", "", str(text), flags=re.UNICODE)

여기서 정규 표현식은 공백이나 단어 문자를 제외한 모든 문자와 일치합니다. 이 플래그 re.UNICODE는 전체 유니 코드 문자 집합을 일치시키는 데 사용됩니다.


답변

다른 답변에서 지적 했듯이이 작업을 수행하는 방법은 유니 코드 속성 / 범주를 사용하는 것입니다. 허용되는 답변 은 표준 라이브러리 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의 설명서를 사용하여 이들 중 하나를 사용하는 방법을 알아낼 것으로 예상됩니다 .


답변