【问题标题】:Removes text between two tags python删除两个标签之间的文本python
【发布时间】:2020-02-03 08:40:25
【问题描述】:

我有数据框。 df[0] 包含

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 >

我要删除:

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

如何做到这一点?谢谢

【问题讨论】:

标签: python dataframe tags


【解决方案1】:

作为示例数据框:

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

使用 pandas 字符串替换并传递 regex = True。如果您有其他需要替换的模式,请使用| 符号额外添加正则表达式模式。

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

【讨论】:

  • 如果我想删除 {{ 和 }} 之间的文本,我的意思是我想删除这个:{{text}}?
  • 我添加到我的答案中。如果解决了这个问题,请接受它作为答案。如果您对正则表达式有更集中的问题,我建议您再问一个问题。谢谢。
  • 当然,完成。小的变化,但空格是问题,请参阅那里的答案。
【解决方案2】:

我会使用正则表达式。

这是用于您提到的情况的正则表达式:(\&lt;\sref\s\&gt;.*\&lt;\s\/ref\s\&gt;)

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

【讨论】:

  • 如果输入的是dataframe怎么办?
  • 将每一行转换为一个字符串并将其保存回一个可以转换回数据框的列表?我对数据框不太熟悉,但我想正则表达式也可以在数据框中使用?
  • 我发现了这篇关于数据框的文章:pandas.pydata.org/pandas-docs/stable/user_guide/text.html
【解决方案3】:

您可以使用re 来匹配两个标签之间的所有文本。使用&lt; ref &gt;.*&lt; \/ref &gt; 将匹配位于两个标签内的任何文本。

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】:

    用简单的切片?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2012-11-19
      • 2021-04-12
      相关资源
      最近更新 更多