我有一个DataFrame,并且在一个单元格中有一个长文本,例如:
-学生-凯瑟琳A-/学生-收到abc和-学生-麦克B-/学生- 收到的答辩。
我的问题是:如何提取-student-和-/ student-之间的文本,并创建两个新列,第一个为“ Kathrin A”,第二个为“ Mike B”?这意味着该标准在文本中满足两次或多次。
到目前为止我尝试过的是:str.extract('-student- \ s *([^。] *)\ s *-/ student-',expand = False),但这仅提取第一个匹配项,即凯瑟琳·A。
非常感谢!
答案 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-)'
,因此请确保不要最终捕获整个字符串。