熊猫使用相同条件多次提取文本

时间:2018-06-27 13:44:34

标签: python regex pandas extract

我有一个DataFrame,并且在一个单元格中有一个长文本,例如:

-学生-凯瑟琳A-/学生-收到abc和-学生-麦克B-/学生-  收到的答辩。

我的问题是:如何提取-student-和-/ student-之间的文本,并创建两个新列,第一个为“ Kathrin A”,第二个为“ Mike B”?这意味着该标准在文本中满足两次或多次。

到目前为止我尝试过的是:str.extract('-student- \ s *([^。] *)\ s *-/ student-',expand = False),但这仅提取第一个匹配项,即凯瑟琳·A。

非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以将str.split与正则表达式结合使用,并按如下所示定义定界符:

splittxt = ['-student-','-/student-']
df.text.str.split('|'.join(splittxt), expand=True)

输出:

  0            1                   2         3               4
0     Kathrin A    received abc and    Mike B    received def.

答案 1 :(得分:0)

另一种方法是尝试extractall。唯一的警告是将结果放入多行而不是多列。经过一些重新安排,这应该不会成为问题,如果最终解决该问题,请更新此响应。

话虽这么说,但我对您的正则表达式也做了些微修改,这将有助于您同时捕获两者。

<html> <head> <title>Test Page</title> <link rel="stylesheet" type="text/css" href="test.css"> </head> <body> <div id="delta"> </div> <script src="test.js"></script> </body> </html>

唯一的捕获组是'(?<=-student-)(?:\s*)([\w\s]+)(?= -/student-)',因此请确保不要最终捕获整个字符串。