Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

796
Views
Conjunto completo de signos de puntuación para Python (no solo ASCII)

¿Hay una lista o biblioteca que tenga todos los signos de puntuación con los que nos podemos encontrar comúnmente?

Normalmente uso string.punctuation , pero algunos caracteres de puntuación no están incluidos, por ejemplo:

 >>> "'" in string.punctuation True >>> "'" in string.punctuation False
over 4 years ago · Santiago Trujillo
5 answers
Answer question

0

Como han señalado otras respuestas, la forma de hacerlo es a través de las propiedades/categorías de Unicode. La respuesta aceptada accede a esta información a través del módulo unicodedata de la biblioteca estándar, pero según el contexto en el que lo necesite, podría ser más rápido o más conveniente acceder a esta misma información de propiedad mediante expresiones regulares.

Sin embargo, el re de biblioteca estándar no proporciona soporte Unicode extendido. Para eso, necesita el módulo regex , disponible en PyPI ( 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='''>

Aquí se proporciona una buena descripción general de todos los diferentes tipos de propiedades Unicode que puede buscar mediante expresiones regulares. Además de estas funciones adicionales de expresión regular, que están documentadas en su página de inicio de PyPI, regex proporciona deliberadamente la misma API que re , por lo que se espera que use la documentación de re para descubrir cómo usar cualquiera de ellas.

over 4 years ago · Santiago Trujillo Report

0

Puede que te vaya mejor con esta comprobación:

 >>> import unicodedata >>> unicodedata.category("'").startswith("P") True >>> unicodedata.category("'").startswith("P") True

Las categorías Unicode P* son específicamente para puntuación :

conector (Pc), guión (Pd), comilla inicial (Pi), comilla final (Pf), abrir (Ps), cerrar (Pe), otro (Po)

Para preparar la colección exhaustiva, que luego puede usar para verificaciones rápidas de membresía, use una comprensión establecida:

 >>> 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

La expresión de asignación aquí requiere Python 3.8+, equivalente para versiones anteriores de Python:

 chrs = (chr(i) for i in range(sys.maxunicode + 1)) punctuation = set(c for c in chrs if category(c).startswith("P"))

Tenga en cuenta que algunos de los otros caracteres en string.punctuation están en realidad en la categoría Símbolo Unicode. Es fácil agregarlos también si lo desea.

over 4 years ago · Santiago Trujillo Report

0

La respuesta publicada por wim es correcta si desea verificar si un carácter es un carácter de puntuación.

Si realmente necesita una lista de todos los caracteres de puntuación como sugiere el título de su pregunta, puede usar lo siguiente:

 import sys from unicodedata import category punctuation_chars = [chr(i) for i in range(sys.maxunicode) if category(chr(i)).startswith("P")]
over 4 years ago · Santiago Trujillo Report

0

La respuesta de wim es excelente si puede cambiar su código para usar una función.

Pero si tiene que usar el operador in (por ejemplo, está llamando al código de la biblioteca), puede usar la escritura pato:

 import unicodedata class DuckType: def __contains__(self,s): return unicodedata.category(s).startswith("P") punct=DuckType() #print("'" in punct,'"' in punct,"a" in punct)
over 4 years ago · Santiago Trujillo Report

0

Eso parece un buen trabajo para una expresión regular (regexp):

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

Aquí, la expresión regular coincide con todo, excepto con espacios en blanco o caracteres de palabras. El indicador re.UNICODE se utiliza para hacer coincidir el conjunto completo de caracteres Unicode.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!