A menudo tengo que hacer varias sustituciones de la misma cadena:
(format "%s %s %s" "a" "a" "a") ;; gives: "a a a"
(es solo un ejemplo ficticio, en este caso es mejor pegar "a" con un espacio en blanco, pero en general trato situaciones más complicadas)
¿Hay alguna manera de hacer una sustitución con nombre? Por ejemplo, en python se escribiría:
"{0} {0} {0}".format("a") # or:
"{name} {name} {name}".format(name="a")
Respuestas:
Reescribir esta respuesta da otra solución:
Editar : otra
format-spec
soluciónComo Malabarba da otra solución en los comentarios:
Edición 2 : Evaluación antes de la sustitución:
Aquí hay ejemplos con evaluación antes de la sustitución:
fuente
format-spec-make
es solo una lista:'((?a . "a") (?b . "b"))
Biblioteca de manipulación de cadenas de magnar Sveen s.el ofrece una variedad de maneras de hacer esto. Por ejemplo:
Tenga en cuenta que
s-format
puede tomar cualquier función sustituto, sino que proporciona un manejo especial paraaget
,elt
ygethash
. Por lo tanto, podría usar una lista de tokens y hacer referencia a ellos por índice, así:También puede reemplazar el uso de variables dentro del alcance, como este:
fuente
El formato s-lex de s.el es realmente lo que quieres, pero si realmente quieres poner código dentro de los bloques de sustitución y no solo nombres de variables, escribí esto como una prueba de concepto.
Incluso puedes insertar una
fmt
llamada dentro de otrafmt
si estás locoEl código simplemente se expande a una
format
llamada para que todas las sustituciones se realicen en orden y se evalúen en tiempo de ejecución.Se podrían hacer mejoras con qué tipo de formato se usa en lugar de usar siempre% s, pero eso tendría que hacerse en tiempo de ejecución y agregaría una sobrecarga, pero podría hacerse rodeando todos los argumentos de formato en una llamada de función que formatea bien las cosas muy bien en tipo, pero en realidad el único escenario en el que desearía que probablemente sea flotante e incluso podría hacer un (formato "% f" flotante) en la sustitución es que estaba desesperado.
Si trabajo más en ello, es más probable que actualice esta esencia en lugar de esta respuesta. https://gist.github.com/jordonbiondo/c4e22b4289be130bc59b
fuente
No es un propósito general, pero resolverá su caso:
Usando el ejemplo proporcionado:
da:
fuente
" * - :raw-html:`<img width=\"100%%\" src=\"http://xxx.xxx/images/languages/staff/%s.jpg\" alt=\"%s.jpg\"/>` - .. _%s:"
todos%s
son iguales.