Pregunta

Esto es bueno:

  
    
      

cadena de importación       string.capwords (" nombre propio ")       'Nombre propio'

    
  

Esto no es tan bueno:

  
    
      

string.capwords (" I.R.S ")       'I.r.s'

    
  

¿No hay un método de cadena para hacer capwords para que se adapte a las siglas?

¿Fue útil?

Solución

Esto podría funcionar:

import re

def _callback(match):
    """ This is a simple callback function for the regular expression which is 
        in charge of doing the actual capitalization. It is designed to only 
        capitalize words which aren't fully uppercased (like acronyms).
    """
    word = match.group(0)
    if word == word.upper():
        return word
    else:
        return word.capitalize()

def capwords(data):
    """ This function converts `data` into a capitalized version of itself. This 
        function accomidates acronyms.
    """
    return re.sub("[\w\'\-\_]+", _callback, data)

Aquí hay una prueba:

print capwords("This is an IRS test.")    # Produces: "This Is An IRS Test."
print capwords("This is an I.R.S. test.") # Produces: "This Is An I.R.S. Test."

Otros consejos

No, no existe tal método en la biblioteca estándar.

Incluso si existiera dicha función, ¿qué haría cuando se le pida que procese " IRS " ;? Incluso el IRS se hace llamar & Quot; IRS & Quot; sin puntos.

Acabo de utilizar una lista de comprensión: [". " .join ([string.capwords (l) para l en entry.split (". " )]) para ingresar en original_list]

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top