在 Python 数据框中通过 RegEx 删除不同的文本短语

基本上,我想删除嵌入在我的文本数据中的某些短语模式:

  1. 以大写字母开头,以 Em Dash "—" 结尾

  2. 以 Em Dash "—" 开头并以 "Read Next" 结尾

说,我有以下数据:

宿务市——被杀的人权律师的遗孀......引用了 NUPL 的数据,该数据显示过去两年有 34 名律师被杀。— JULIE M. AURELIO 和 DJ YAP 的报告阅读下一个

菲律宾马尼拉——总统……但正义最终会突破他们的有罪不罚之墙,……——来自 MELVIN GASCON、JULIE M. AURELIO、DELFIN T. MALLARI JR.、JEROME ANING、JOVIC YEE、GABRIEL 的报道PABICO LALU、PATHRICIA ANN V. ROXAS、DJ YAP、法新社、APRead Next

我想删除以下短语:

“宿雾城——”

“—来自朱莉 M.奥雷利奥和 DJ YAP 的报告阅读下一个”

“菲律宾马尼拉-”

“——来自 MELVIN GASCON、JULIE M. AURELIO、DELFIN T. MALLARI JR.、JEROME ANING、JOVIC YEE、GABRIEL PABICO LALU、PATHRICIA ANN V. ROXAS、DJ YAP、法新社、APRead Next 的报道”

我假设上面列举的每个模式都需要两个正则表达式。

regex:—[A-Z].*Read Next\s*$可能适用于模式#2,但仅当文本数据中没有其他破折号时才有效。当模式 #1 出现时它不会工作,因为它会从它看到的第一个 em 破折号中删除块,直到“ Read Next ”字符串。

我已经为模式 #1 尝试了以下正则表达式:

^[A-Z]([A-Za-z]).+(—)$

但是怎么就不行了。该正则表达式应该查找以任何大写字母开头的短语,然后是任何长度的字符串,只要它以“—”结尾。


慕工程0101907
浏览 188回答 2
2回答

九州编程

您正在考虑的连字符-实际上并不是连字符,而是称为Em Dash,因此您需要使用此正则表达式,它在开始时使用 em 破折号而不是连字符,^—[A-Z].*Read Next\s*$这是这个正则表达式的解释,^ --> 开始输入—--> 匹配Em DashUnicode 十进制代码为 8212的文字[A-Z] --> 匹配一个大写字母.* --> 匹配任意字符零次或多次Read Next --> 匹配这些文字\s* --> 这是为了匹配任何可能出现在行尾的可选空白$ --> 输入结束

ITMISS

应该处理这个的正则表达式 -^—[A-Z]+(.)*(Read Next)$你可以尝试在你的数据上实现这个正则表达式,看看它是否有效。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python