dise que j'ai une corde comme J'espère sortir pour être p> si le début est le numéro, ajoute 0 Pour en faire trois chiffres. P> est là un moyen d'atteindre l'utilisation de regex dans Python? P> P>
3 Réponses :
Oui, les regexes peuvent faire cela. Utilisez Le modèle que j'ai utilisé, Puis, pour chaque motif correspondant, la fonction La fonction transforme les chiffres en un entier, puis utilise le Notez que le motif peut correspondre plus em> chiffres, Mais les limiter n'a pas beaucoup de sens, sauf s'il existe un nombre supérieur strict que vous souhaitez limiter à (à quel point vous devez également ajouter une restriction sur le caractère suivant pas em> étant un chiffre). Le format Démo: P> > Encore une fois, prenez en compte la présente méthode des cessions spéciales avec 4 chiffres ou plus au début; Vous obtenez simplement une séquence de chiffres plus longue: p> Cela se produirait même si nous limitations le modèle Si vous souhaitez effectuer la largeur de rembourrage configurable, vous pouvez tout mettre dans une fonction imbriquée et utiliser la mise en forme de chaîne. Vous ne devez pas vraiment besoin em> p> démo: p> RE2 () CODE> A > avec une fonction de rappel: ^ (\ d +) code> correspond à 1 ou plusieurs chiffres ( \ d code> est Un chiffre, + code> correspondra au moins une fois mais englobera tous les chiffres suivants), mais uniquement au début de la chaîne ( ^ code> est le "début du texte". Ici). P> pad_number () code> est appelée et la chaîne que cette fonction renvoie est utilisée pour remplacer le motif correspondant. Parce que le motif utilise un em> groupe de capture em> (tout entre ( code> et ) code> est un tel groupe) la fonction peut accéder aux chiffres correspondants en appelant match.group (1) code> a >. p> format () code> fonction pour revenir entier dans le texte, mais cette fois-ci en tant que numéro de 3 caractères matelassés à 0; C'est ce que l'instruction 03 code> indique le format () code> à produire. p> (numéro, "03d") code> L'instruction produit un numéro au moins em> 3 chiffres de large mais peut gérer des valeurs plus longues. P> \ d code> pour ne correspond à 3 chiffres maximum ( Par exemple, avec \ d {1,3} code>). p>
J'aimerais entendre ce qui n'est pas utile ou tort de ma réponse, de mériter un bowvote. De cette façon, je peux améliorer ma réponse!
Quelqu'un DV tous les deux - peut-être une "aucune tentative sur la question, permet de descendre toutes les réponses" DV ...
@Martijnpieters merci beaucoup! Une question latérale: est-il possible de mettre le paramètre 3 en tant que paramètre de fonction ou variable pour être entré par l'utilisateur?
@ William007: Oui, avec la formatage de chaîne Vous pouvez générer des modèles d'expression réguliers et vous souhaiteriez utiliser une fermeture pour que la fonction de remplacement, récupérez le paramètre à utiliser dans Format () code> Fonction.
@ WilliAiam007: Mettez donc tout dans une fonction (y compris le pad_number () code> fonction, non altéré autre que l'indentation), avec largeur code> comme paramètre et modifiez le format () code> appelez au format (numéro, f "0 {largeur} d") code>.
@ WilliAiam007: J'ai réalisé qu'il n'y a pas de point de définition d'une limite supérieure à la correspondance du chiffre, j'ai donc changé cela pour simplement utiliser + code>.
@Martijnpieters a noté, de grands changements
Vous avez spécifiquement demandé à RegEx - (voir Solution de Martijn ) - mais peut le faire avec une manipulation de chaîne aussi: xxx pré>
sortie: p> alternatif - supposé être plus rapide: p>
def prefixZeroIfStartWithNumber(t):
number, _, remainder = t.partition(" ")
try:
k = int(number)
return f"{k:03} {remainder}" # format with zeros, add remainder
except (ValueError, IndexError):
return t
Quelqu'un sur une Sauvage DV Spree - Gotta l'aime.
Eh bien, cela donne au moins une certaine crédence qu'elles peuvent provenir de quelqu'un qui estime que nous n'avions pas de confiance pour avoir répondu à cette question, et non parce que nous avons manqué quelque chose dans nos réponses.
CONSEIL PRO: Lorsque vous divisez juste une fois i> sur une chaîne fixe, utilisez str.partition () code>; Il est plus rapide pour cette usecase. Par exemple. premier, _, reste = t.partition ("") code>.
@martijn Pieters vous a donné la réponse correcte em>, mais vous pouvez également faire la même chose plus simple, exécutez cette regex deux fois: ici je vous montre la même chose en JavaScript pour la simplicité: p> p> const regex = /^(?=\d\d? )/gm;
const str = `
1 - hello.mp3
22 - hellox.mp3
223 - hellox.mp3
hellox.mp3`;
const subst = `0`;
const result = str.replace(regex, subst).replace(regex, subst);
console.log('Substitution result: ', result);