Removes text between 2 tags python

耗尽温柔 提交于 2020-02-06 07:22:14

问题


I haved scraped data from Wikipedia and created a dataframe. df[0] contains

{{Infobox_President  |name = Mohammed Anwar Al Sadat  < br / >  محمد أنورالسادات  |nationality = Al Menofeia, Mesir  |image = Anwar Sadat cropped.jpg  |order = Presiden Mesir ke-3  |term_start = 20 Oktober 1970  |term_end = 6 Oktober 1981  |predecessor = Gamal Abdel Nasser  |successor = Hosni Mubarak  |birth_date =|birth_place = Mit Abu Al-Kum, Al-Minufiyah, Mesir  |death_place = Kairo, Mesir  |death_date =|spouse = Jehan Sadat  |party = Persatuan Arab Sosialis  < br / >  (hingga 1977)  < br / >  Partai Nasional Demokratik (Mesir)|Partai Nasional Demokratik  < br / >  (dari 1977)  |vicepresident =|constituency =}}  Jenderal Besar Mohammed Anwar Al Sadat () adalah seorang tentara dan politikus Mesir. Ia menjabat sebagai Presiden Mesir|Presiden ketiga Mesir pada periode 15 Oktober 1970 hingga terbunuhnya pada 6 Oktober 1981. Oleh dunia Barat ia dianggap sebagai orang yang sangat berpengaruh di Mesir dan di Timur Tengah dalam sejarah modern.

I want to remove:

{{Infobox_President  |name = Mohammed Anwar Al Sadat  < br / >  محمد أنورالسادات  |nationality = Al Menofeia, Mesir  |image = Anwar Sadat cropped.jpg  |order = Presiden Mesir ke-3  |term_start = 20 Oktober 1970  |term_end = 6 Oktober 1981  |predecessor = Gamal Abdel Nasser  |successor = Hosni Mubarak  |birth_date =|birth_place = Mit Abu Al-Kum, Al-Minufiyah, Mesir  |death_place = Kairo, Mesir  |death_date =|spouse = Jehan Sadat  |party = Persatuan Arab Sosialis  < br / >  (hingga 1977)  < br / >  Partai Nasional Demokratik (Mesir)|Partai Nasional Demokratik  < br / >  (dari 1977)  |vicepresident =|constituency =}} 

How can I do this? I have tried

df['Body'] = df['Body'].replace('< ref >.< \/ref > | {{.}} | {{.*=}}','', regex = True)
df['Body'] = df['Body'].str.replace('\'\'\' | \n | [ | ] | \'\'','',regex=True)

but it doest work


回答1:


This shall do the trick

import re
re.sub('^{{.*}}','', text)

you can apply this function to the column of your dataframe and it will transform the column.




回答2:


You were very close, why it did not work was because of the extra spacing in your regex pattern, | {{.*=}} considers the space behind the curly spaces. As suggested as the other answer you can use the special operator ^ that anchors at the start of the line.

Else to apply a regex replace that matches that exact pattern then remove the whitespaces in your pattern:

text = '{{Infobox_President  |name = Mohammed Anwar Al Sadat  < br / >  محمد أنورالسادات  |nationality = Al Menofeia, Mesir  |image = Anwar Sadat cropped.jpg  |order = Presiden Mesir ke-3  |term_start = 20 Oktober 1970  |term_end = 6 Oktober 1981  |predecessor = Gamal Abdel Nasser  |successor = Hosni Mubarak  |birth_date =|birth_place = Mit Abu Al-Kum, Al-Minufiyah, Mesir  |death_place = Kairo, Mesir  |death_date =|spouse = Jehan Sadat  |party = Persatuan Arab Sosialis  < br / >  (hingga 1977)  < br / >  Partai Nasional Demokratik (Mesir)|Partai Nasional Demokratik  < br / >  (dari 1977)  |vicepresident =|constituency =}}  Jenderal Besar Mohammed Anwar Al Sadat () adalah seorang tentara dan politikus Mesir. Ia menjabat sebagai Presiden Mesir|Presiden ketiga Mesir pada periode 15 Oktober 1970 hingga terbunuhnya pada 6 Oktober 1981. Oleh dunia Barat ia dianggap sebagai orang yang sangat berpengaruh di Mesir dan di Timur Tengah dalam sejarah modern.'
df = pd.DataFrame({'text':[text]})

new_df = df.replace('< ref >.< \/ref >|{{.*}}','', regex = True)

new_df.text[0]

Output:
'  Jenderal Besar Mohammed Anwar Al Sadat () adalah seorang tentara dan politikus Mesir. Ia menjabat sebagai Presiden Mesir|Presiden ketiga Mesir pada periode 15 Oktober 1970 hingga terbunuhnya pada 6 Oktober 1981. Oleh dunia Barat ia dianggap sebagai orang yang sangat berpengaruh di Mesir dan di Timur Tengah dalam sejarah modern.'


来源:https://stackoverflow.com/questions/60038635/removes-text-between-2-tags-python

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