0
votes

Recherchez et déplacez le mot dans la chaîne à la fin de la phrase. Python3.x

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"


3 commentaires

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.


4 Réponses :


1
votes

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)


3 commentaires

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.



1
votes

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>


3 commentaires

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



0
votes

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"


0 commentaires

1
votes

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)


0 commentaires