1
votes

Supprime le texte entre deux balises python

J'ai des dataframe. Le df [0] contient

< ref > {{cite book|last = Russell|first = Peter|title = iGenetics|publisher = Benjamin Cummings|location = New York|year = 2001|isbn = 0-8053-4553-1 }} < /ref >

Je veux supprimer:

Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. < ref > {{cite book|last = Russell|first = Peter|title = iGenetics|publisher = Benjamin Cummings|location = New York|year = 2001|isbn = 0-8053-4553-1 }} < /ref >

Comment faire cela? Merci


1 commentaires

4 Réponses :


0
votes

J'utiliserais Regex.

Voici la regex à utiliser pour le cas que vous mentionnez: (\ . * \ )

import re

string = 'Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. < ref > {{cite book|last = Russell|first = Peter|title = iGenetics|publisher = Benjamin Cummings|location = New York|year = 2001|isbn = 0-8053-4553-1 }} < /ref >dasda'


string = re.sub('(\<\sref\s\>.*\<\s\/ref\s\>)', '', string)


print(string)

#output: Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. dasda


3 commentaires

Comment si l'entrée est dataframe?


Convertissez chaque ligne en chaîne et enregistrez-la à nouveau dans une liste que vous pouvez reconvertir en dataframe? Je ne suis pas très familier avec les dataframes, mais je suppose que regex pourrait également être utilisé dans un dataframe?


J'ai trouvé cet article sur les dataframes: pandas.pydata.org/pandas-docs /stable/user_guide/text.html



0
votes

Vous pouvez utiliser re pour faire correspondre tout le texte entre les deux balises. L'utilisation de . * correspondra à tout texte qui se trouve dans les deux balises.

import re

string = 'Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. < ref > {{cite book|last = Russell|first = Peter|title = iGenetics|publisher = Benjamin Cummings|location = New York|year = 2001|isbn = 0-8053-4553-1 }} < /ref >'

string = re.sub(f'< ref >.*< \/ref >', '', string)

string
'Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. '


0 commentaires

0
votes

avec un simple tranchage?

new_string = string[0 : string.find("< ref >"]


0 commentaires

1
votes

Comme exemple de dataframe:

new_df = df.text.replace('< ref >.*< \/ref > | {{.*}}','', regex = True)
print(new_df.values[0])
print(new_df.values[1])

Output:
Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. < ref > < /ref >
Eukariota|Organisme eukariotik

Utilisez pandas string replace et passez regex = True . Si vous avez des modèles supplémentaires à remplacer, utilisez le symbole | pour ajouter en plus des modèles d'expression régulière.

string1 = 'Eukariota|Organisme eukariotik (hewan, tumbuhan, fungi, dan protista) menyimpan kebanyakan DNA-nya dalam inti sel dan sebagian kecil sisanya dalam organel seperti mitokondria ataupun kloroplas. < ref > {{cite book|last = Russell|first = Peter|title = iGenetics|publisher = Benjamin Cummings|location = New York|year = 2001|isbn = 0-8053-4553-1 }} < /ref >'
string2 = 'Eukariota|Organisme eukariotik {{title}}'
data = [string1, string2]
df = pd.DataFrame(data, columns = ['text'])


4 commentaires

Comment si je veux supprimer du texte entre {{et}}, je veux dire que je veux supprimer ceci: {{text}}?


J'ai ajouté à ma réponse. Veuillez accepter comme réponse si cela résout cette question. Si vous avez une question plus ciblée sur les regex, je vous suggère de poser une autre question. Merci.


[ stackoverflow.com/questions/ 60038635 /… veuillez répondre


Bien sûr, c'est fait. Petit changement mais les espaces étaient les problèmes, reportez-vous à la réponse là-bas.