Entrée: 'blah move_me2, nah'
Sortie: 'blah, nah move_me2'
Code actuel:
raw = 'blah move_me2 , nah '
word = 'move_me'
start_idx = raw.index('move_me')
end_idx = ed_idx + len(word) + 1
raw = raw + ' ' + raw[start_idx:end_idx]
raw = raw.replace(raw[start_idx:end_idx], '', 1)
print(raw)
Besoin d'aide avec: Est-il possible de le rendre plus efficace et éventuellement avec regex?
Remarque : le mot "move_me" peut avoir quelques chartes supplémentaires à la fin, dans ce cas "2"
4 Réponses :
Ce code fonctionne, je ne sais pas s'il correspond à vos souhaits, car il utilise simplement des opeartors de chaîne python au lieu de regex. Vous pouvez rechercher et remplacer une chaîne, puis l'ajouter. Pour le moment, il n'y a pas de contrôle si la chaîne est réellement en brut. Peut-être devriez-vous d'abord le prouver.
blah 2 , nah move_me
Résultat:
raw = 'blah move_me2 , nah ' word = 'move_me' a = raw.replace(word, "") + str(word) print(a)
Merci pour votre réponse, vous avez presque répondu à ma question. Le seul problème avec le mot "move_me" peut avoir quelques chartes supplémentaires à la fin, dans ce cas "2".
Pour moi, le code fonctionne si je change "word" en word = 'move_me2' ...
Le problème est que je ne sais pas ce que serait à la fin du "move_me". Merci encore une fois.
Vous pouvez utiliser le module 're' pour obtenir la chaîne attendue.
blah , nah move_me2
Sortie:
import re
raw = 'blah move_me2 , nah '
word = 'move_me'
find_str = re.search(r'(%s[^\s]+)' % word, raw)
if find_str:
new_str = raw[find_str.span()[0]:find_str.span()[1]:]
renew_str = raw.replace(new_str, '')
renew_str += new_str
print(renew_str)
p>
C'est exactement ce que je recherchais. Cependant, le mot "move_me" peut avoir quelques chartes supplémentaires à la fin, dans ce cas, '2'. Est-il possible de tout déplacer avec des «chartes supplémentaires» à la fin?
@Good_Man J'ai édité l'ancien code. Veuillez consulter le nouveau code. Cela peut vous aider.
[^ \ s] est identique à \ S
Faites travailler la fonction span sur la sortie de la recherche pour découper la chaîne d'origine, extraire le mot et le coller à la fin de la chaîne.
import re
txt="blah move_me2 , nah "
txt[:re.search("move_me2",txt).span()[0]] + txt[re.search("move_me2",txt).span()[1]:]+" move_me2"
Si j'ai compris ce que vous voulez, le code suivant peut vous aider:
raw_input,word = 'blah move_me2 , nah ','move_me' raw_output = raw_input[:raw_input.find(word)] + raw_input[raw_input.find(word)+len(word):] + word print(raw_output)
La fonction find est un bon moyen de trouver la position d'un élément dans une chaîne (elle renvoie le position de départ du mot / de la phrase).
J'en ai fait une version plus courte si vous voulez:
raw_input = 'blah move_me2 , nah ' word = 'move_me' pos_start = raw_input.find(word) raw_output = raw_input[:pos_start] + raw_input[pos_start+len(word):] + word print(raw_output)
oui, mais pour utiliser une regex, il faudrait un modèle
Si votre code fonctionne bien et qu'il n'y a pas de problème, veuillez envisager de publier la question à l'adresse Révision du code .
@ WiktorStribiżew, merci. Je ne connaissais pas la révision du code.