upper - ¿Haciendo letras mayúsculas usando re.sub en python?
python contar minusculas (5)
En muchos lenguajes de programación, los siguientes
encuentre la foo([az]+)bar
y reemplácela con GOO/U/1GAR
resultará en que todo el partido se haga en mayúsculas. Parece que no puedo encontrar el equivalente en python; ¿existe?
¿Te refieres a algo como esto?
>>>x = "foo spam bar"
>>>re.sub(r''foo ([a-z]+) bar'', lambda match: r''foo {} bar''.format(match.group(1).upper()), x)
''foo SPAM bar''
Para referencia, aquí está la cadena de re.sub
de re.sub
(énfasis mío).
Devuelva la cadena obtenida reemplazando las repeticiones que no se superponen más a la izquierda del patrón en la cadena por la respuesta de reemplazo. repl puede ser una cadena o un llamable ; Si una cadena, la barra invertida se escapa en ella se procesa. Si es una llamada, se pasa el objeto de coincidencia y debe devolver una cadena de reemplazo para ser utilizada.
Para aquellos que vienen a través de esto en google ...
También puede usar re.sub para hacer coincidir patrones de repetición. Por ejemplo, puede convertir una cadena con espacios a camelCase:
def to_camelcase(string):
string = string[0].lower() + string[1:] # lowercase first
return re.sub(
r''[/s]+(?P<first>[a-z])'', # match spaces followed by /w
lambda m: m.group(''first'').upper(), # get following /w and upper()
string)
to_camelcase(''String to convert'') # --> stringToConvert
Podrías usar alguna variación de esto:
s = ''foohellobar''
def replfunc(m):
return m.groups()[0]+m.groups()[1].upper()+m.groups()[2]
re.sub(''(foo)([a-z]+)(bar)'',replfunc,s)
da la salida:
''fooHELLObar''
Puede pasar una función a re.sub()
que le permitirá hacer esto, aquí hay un ejemplo:
def upper_repl(match):
return ''GOO'' + match.group(1).upper() + ''GAR''
Y un ejemplo de usarlo:
>>> re.sub(r''foo([a-z]+)bar'', upper_repl, ''foobazbar'')
''GOOBAZGAR''
Si ya tiene una cadena de reemplazo (plantilla), es posible que no le m.group(1)+...+m.group(2)+...+m.group(3)
con la verbosidad de m.group(1)+...+m.group(2)+...+m.group(3)
... A veces es bueno tener una pequeña cadena ordenada.
Puede usar la MatchObject
expand() MatchObject
para evaluar una plantilla para la coincidencia de la misma manera que expand() , lo que le permite conservar la mayor cantidad posible de su plantilla original. Puede utilizar upper
en las piezas relevantes.
re.sub(r''foo([a-z]+)bar'', lambda m: ''GOO'' + m.expand(''/1GAR'').upper())
Si bien esto no sería particularmente útil en el ejemplo anterior, y si bien no ayuda con circunstancias complejas, puede ser más conveniente para expresiones más largas con un mayor número de grupos capturados, como una dirección MAC que censura expresiones regulares, donde solo desea para asegurar que el reemplazo completo esté en mayúsculas o no.