1
votes

comment faire correspondre un motif et y ajouter un caractère

J'ai quelque chose comme:

GCF_002904975_S:2.6672e-05):2.6672e-05.

et je voudrais ajouter le mot «_S» juste après toute entrée GCF (n'importe quel nombre) avant les deux points suivants.

En d'autres termes, j'aimerais que mon texte devienne comme:

GCF_002904975:2.6672e-05):2.6672e-05.

J'ai répété des motifs comme ça tout au long de mon texte.


2 commentaires

Prenez un moment pour lire l ' aide à la modification dans le centre d'aide. Le formatage sur Stack Overflow est différent des autres sites. Plus votre message est beau, plus il est facile pour les autres de le lire et de le comprendre.


@Mariano, pouvez-vous fournir un exemple plus court? c'est difficile à suivre vu la longueur


3 Réponses :


0
votes

Pourquoi ne pas simplement remplacer? Raccourcir votre exemple de chaîne pour en faciliter la lecture:

"(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)...".replace(":","_S:")


0 commentaires

1
votes

Vous pouvez utiliser des expressions régulières avec une substitution de fonction. La solution ci-dessous dépend du fait que les nombres comportent toujours 9 chiffres, mais peut être modifiée pour fonctionner avec d'autres cas.

test_str = '(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'
new_str = re.sub(r"GCF_\d{9}", lambda x: x.group(0) + "_S", test_str)

print(new_str)
#(((GCF_001297375_S:2.6671e-05,GCF_002904975_S:2.6672e-05)0.924:0.060046136,GCF_000144955_S:0.036474926,((GCF_001681075_S:0.017937143,...


0 commentaires

2
votes

Cela peut être facilement fait avec la fonction re.sub . Un exemple de travail ressemblerait à ceci:

import re

inp_string='(((GCF_001297375:2.6671e-05,GCF_002904975:2.6672e-05)0.924:0.060046136,(GCF_000144955:0.036474926,((GCF_001681075:0.017937143,...'

if __name__ == "__main__":
    outp_string = re.sub(r'GCF_(?P<gfc_number>\d+)\:', r'GCF_\g<gfc_number>_S:', inp_string)
    print(outp_string)

Ce code donne le résultat suivant, qui est, espérons-le, ce dont vous avez besoin:

(((GCF_001297375_S: 2.6671e -05, GCF_002904975_S: 2.6672e-05) 0.924: 0.060046136, (GCF_000144955_S: 0.036474926, ((GCF_001681075_S: 0.017937143, ...

Pour plus d'informations, consultez la documentation: https://docs.python.org/3/library/re.html


0 commentaires