Insérer un caractère de saut de ligne à chaque 64 caractères à l'aide de Python
À l'aide de Python j'ai besoin d'insérer un caractère de saut de ligne dans une chaîne de tous les 64 caractères. En Perl, c'est facile:
s/(.{64})/$1\n/
Comment cela pourrait-il être fait en utilisant des expressions régulières en Python?
Est-il plus pythonic façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Même comme en Perl, mais avec une barre oblique inverse à la place du dollar pour l'accès aux groupes:
re.DOTALL
est l'équivalent en Perls/
option.s2="0123456789"*200
, ta solution me semble être brisé, qui uniquement insère exactement 16 '\n' (sur Python 2.7.1). Un correctif?re.DOTALL
). Depuis j'ai oublié ce paramètre, re.DOTALL (valeur 16) a été utilisé comme nombre maximum de remplacements.64
?thisisafile
àthi,sisafi,l,e
(le nombre de caractères après pour entrer un caractère codé en dur)comme ici par exemple, il aurait été3 6 1 1
"(.{%d})"%varname
semble un peu hackish; il doit y avoir une meilleure façon.sans regexp:
plus court mais moins lisible (omi):
Le code ci-dessus est pour Python 2.x. Pour Python 3.x, vous souhaitez utiliser
range
et pasxrange
:timeit.timeit
dit 100000 exécutions de l'expression de la solution de prendre de 27,8 secondes, tandis que 100000 exécutions de vos plus courte de la solution de prendre 4.45 secondes).join
méthode.J'irais avec:
textwrap
est l'espace conscient, donc ce ne sera pas la poignée"12345 "*100
correctement.prenant @J. F. Sebastian solution un pas de plus, et c'est près de pénale 🙂
regarder ma... pas de regexes! car comme vous le savez... http://regex.info/blog/2006-09-15/247
merci pour nous introduire à
d'habillage de texte
module... même si elle a été en Python depuis 2.3, je n'ai jamais été au courant de ça jusqu'à maintenant (oui, j'avoue que public)!!textwrap
est l'espace conscient, donc ce ne sera pas la poignée"12345 "*100
correctement.Minuscule, pas sympa:
Je vous suggérons la méthode suivante:
C'est, plus ou moins, la non-RE méthode profitant de la RE moteur pour la boucle.
Sur un pc lent, j'ai comme un serveur à la maison, cela donne:
AndiDog de la méthode:
alex gurney 2e/Michael méthode:
Je ne considère pas le
textwrap
méthode correcte pour la spécification de la question, donc je ne vais pas le temps que cela.MODIFIER
Changé répondre parce que c'était incorrect (honte sur moi!)
EDIT 2
Juste pour le plaisir, la RE-méthode à l'aide de
itertools
. C'taux tiers de la vitesse, et il n'est pas Pythonic (trop lispy):itertools a une jolie recette pour une fonction
grouper
qui est bon pour ça, surtout si votre dernière tranche est inférieure à 64 caractères et vous ne voulez pas une tranche d'erreur:Utiliser comme ceci: