问题
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