Ваше регулярное выражение r '(? I) \ w Образование \ w [^?] +' Найдет «Образование», необязательно с дополнительными буквами и цифрами с обеих сторон;затем продлите это до следующего знака вопроса.\ w не будет включать пробелы, знаки пунктуации и т. д.
Я сомневаюсь, что это то, что вы хотите.Было бы получить такие вещи, как:
XYZEducationismallly
, но не
Relevant Education
[^?] Означает что-то, что не '?';но я не понимаю, почему вы хотите отсканировать до следующего знака вопроса (или конца строки).
Кроме того, если нет "?"примерно (как это вероятно), это "+" приведет все к концу всей исходной строки - но вы, вероятно, хотите остановиться на следующем заголовке (если есть), таком как "История занятости" или что-то еще.
На самом деле сделать это правильно будет сложно, потому что резюме могут быть преобразованы в текст разными способами (один очевидный пример: каждая из строк текста может представлять одну «визуальную» строку из оригинала или один «абзацный» блок)или даже одну ячейку таблицы, если создатель использовал таблицы для разметки (как это обычно бывает).
Но если вы застряли в работе с текстом, возможно, более ясный и простой способ выглядит так:
eduSection = []
inEducationSection = False
for line in resume:
if re.search(r'\bEducation', line):
inEducationSection = True
elif re.search(r'\b(History|Experience|other headingish things)', line):
inEducationSection = False
elif inEducationSection:
eduSection.append(line)
Если вы сможете более точно определить, как выглядят «заголовки» в ваших данных, вы получите гораздо лучшие результаты.Например:
* headings might be all caps, or title caps;
* headings might be the only things that start in column1
* headings might have no punctuation except final ':'
* headings might be really short compared to (most) other lines
* maybe there are only a few dozen distinct headings that show up often.
Я бы сказал, что первое, что нужно выяснить, это как определить, когда что-то движется.Если у вас есть это, все остальное довольно просто.