Removes text between two tags python

落爺英雄遲暮 提交于 2021-02-11 09:42:10

问题


I have dataframe. The df[0] contains

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 >

I want to remove:

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

How to do that? Thanks


回答1:


As an example dataframe:

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'])

Use pandas string replace and pass regex = True. If you have additional patterns you need to replace, use the | symbole to additionally add regex patterns.

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



回答2:


I would use Regex.

This is the regex to use for the case you mention: (\<\sref\s\>.*\<\s\/ref\s\>)

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:


You can use re to match all text between the two tags. Using < ref >.*< \/ref > will match any text that sits within the two tags.

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. '



回答4:


with simple slicing?

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


来源:https://stackoverflow.com/questions/60035680/removes-text-between-two-tags-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!