Панды извлекают текст несколько раз с одинаковыми критериями - PullRequest
0 голосов
/ 27 июня 2018

У меня есть DataFrame, и в одной ячейке у меня длинный текст, например:

ученик-Катрин А - / студент - получил abc и ученик - Майк Б - / студент- получен def.

Мой вопрос: как я могу извлечь текст между -student- и - / student- и создать две новые колонки с "Kathrin A" в первом и "Mike B" во втором? Это означает, что этот критерий встречается в тексте дважды или несколько раз.

что я пробовал до сих пор: str.extract ('- student- \ s * ([^.] *) \ S * - / student-', expand = False), но это извлекает только первое совпадение, т.е. Катрин А.

Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Другим подходом будет попытка extractall. Единственное предостережение - результат помещается в несколько строк вместо нескольких столбцов. С некоторой перестройкой это не должно быть проблемой, и, пожалуйста, обновите этот ответ, если вы в конечном итоге решите его.

При этом у меня также есть небольшое изменение в вашем регулярном выражении, которое поможет вам захватить оба.

'(?<=-student-)(?:\s*)([\w\s]+)(?= -/student-)'

Единственная группа захвата - [\w\s]+, так что вы не будете в конечном итоге захватывать всю строку.

0 голосов
/ 27 июня 2018

Вы можете использовать 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.
...