J'ai une liste l.
print (l) # ["This is","'the|space|first|space|'string","and 'it|space|is|space|'good"]
Je veux remplacer tous les espaces par "| space |" dans les chaînes qui sont dans les s.
l = ["This is","'the first 'string","and 'it is 'good"]
Je ne peux pas utiliser une boucle for dans une boucle for et utiliser directement .replace () car les chaînes ne sont pas modifiables p >
TypeError: l'objet 'str' ne prend pas en charge l'attribution d'éléments
J'ai vu les questions ci-dessous et aucune d'entre elles ne m'a aidé.
Remplacement de l'élément string dans la boucle for Python (3 réponses)
Exécuter la méthode replace () dans une boucle for? (3 réponses)
Remplacez les chaînes en utilisant List Comprehensions (7 réponses)
J'ai envisagé d'utiliser re.sub mais je ne peux pas penser à une expression régulière appropriée qui fasse le travail.
3 Réponses :
Je pense avoir résolu votre problème de remplacement avec regex. Vous devrez peut-être peaufiner un peu plus l'extrait de code donné en fonction de vos besoins.
Si j'ai bien compris la question, l'astuce consistait à utiliser une expression régulière pour trouver le bon espace à remplacer.
import re
l = ["This is","'the first 'string","and 'it is 'good"]
#declare output
for k in l:
match = re.findall(r"\'(.+?)\'", k)
if not match:
#append k itself to your output
else:
p = (str(match).replace(' ', '|space|'))
#append p to your output
Placement du code squelette pour votre référence:
match = re.findall(r"\'(.+?)\'", k) #here k is an element in list.
Je ne l'ai pas encore testé, mais cela devrait fonctionner. Faites-moi savoir si vous rencontrez des problèmes avec cela.
Cela fonctionne pour moi:
>>> def replace_spaces(str) :
... parts = str.split("'")
... for i in range(1,len(parts),2) :
... parts[i] = parts[i].replace(' ', '|')
... return "'".join( parts )
...
>>> [replace_spaces(s) for s in l]
['This is', "'the|first|'string", "and 'it|is|'good"]
>>>
Merci pour la solution simple! Je ne peux pas croire que je n'y ai pas pensé.
Utilisation de regex text-munging :
['This is', "'the|space|first|space|'string", "and 'it|space|is|space|'g ood"]
Sortie:
import re l = ["This is","'the first 'string","and 'it is 'good"] def repl(m): return m.group(0).replace(r' ', '|space|') l_new = [] for item in l: quote_str = r"'.+'" l_new.append(re.sub(quote_str, repl, item)) print(l_new)
La logique complète est essentiellement:
l . entre guillemets simples . Passez cela à la fonction repl . repl J'utilise un simple replace pour remplacer les espaces par | space | . Référence pour text-munging => https: //docs.python.org/3/library/re.html#text-munging
Je suis à peu près sûr que regex ne fonctionnera pas dans cette situation. Je pense qu'il serait plus facile de faire quelque chose comme diviser la chaîne en utilisant les guillemets comme séparateurs, puis la substitution d'une chaîne.