J'ai une chaîne qui ressemble à ceci:
def normalize(string):
import re
string = string.upper()
rex = re.compile(r'\W')
rex_s = re.compile(r'\s{2,}')
result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
result = rex.sub('', result) # this reduces all those spaces
return result
6 Réponses :
result = rex.sub(' ', string) # this produces a string with tons of whitespace padding
result = rex_s.sub(' ', result) # this reduces all those spaces
bonne prise sur la partie de type. Je viens de remarquer que des moments après avoir posté. Vous m'avez battu avant que j'ai eu la chance d'éditer OMG
Je suggérerais de jeter un coup d'œil au code d'Alex - c'est une méthode beaucoup plus concise d'aborder le problème, et elle gère également la ponctuation / l'espace blanche à la fin de la corde.
Voici une approche en une étape (mais la majuscule utilise réellement une méthode de chaîne - beaucoup plus simple!): où strarg code> est l'argument de chaîne ( NE PAS EM> Noms Utilisez des noms que des modules de construction ou de bibliothèque standard, s'il vous plaît em>). p> p>
Je conviens que cela serait certainement le moyen plus simple d'aborder le problème.
Je suppose que cela devrait être "String" et non "Résultat" dans l'argument de Rex.Sub? Ou est-ce que cela ne remplace que la partie du code de l'utilisateur?
@Brooks, tu as raison - je suis tellement opposé à l'observation des noms intégrés et des noms de module standard, que tout sauf String a volé sur mes doigts. Laissez-moi éditer pour réparer et merci!
Devez-vous utiliser des expressions régulières? Vous sentez-vous que vous devez le faire dans une ligne?
>>> import string >>> s = "stuff . // : /// more-stuff .. .. ...$%$% stuff -> DD" >>> s2 = ''.join(c for c in s if c in string.letters + ' ') >>> ' '.join(s2.split()) 'stuff morestuff stuff DD'
re.sub(r'[_\W]+', ' ', s).strip().upper() # 'AA1BB2 CC DD EE FF GGG'
+1 pour contourner le re.cile (...) code> étape. Si je pouvais, je vous donnerais un autre +1 pour souligner également la question de savoir comment gérer «_» et leader / traînant WS, car ces choses sont souvent négligées avec une regex.
fonctionne dans Python3 Ceci conservera le même caractère d'espaces que vous avez effondré. Donc, si vous avez un onglet et un espace côte à côté de l'autre, ils ne s'effondreront pas dans un seul caractère.
re.sub('\W+', ' ', orig).upper()
On peut utiliser une expression régulière pour substituer des espaces blancs récurrents.
L'espace blanc est donné par \ s code> avec \ s + code> Signification: au moins un. import re
rex = re.compile(r'\s+')
test = " x y z z"
res = rex.sub(' ', test)
print(f">{res}<")