2013-12-22 2 views
0

У меня длинная строка, которая на самом деле представляет собой набор понятий. Я хочу соединить строку и создать список понятий.Как извлечь список строк из одной строки с помощью regex?

Строка начинается с:

Abduction and retroduction Action research: a case study Analysis of variance (ANOVA) Attitudes Autobiography see Biographical method...

Список содержит словарные статьи. В подавляющем большинстве случаев заглавные буквы означают начало новой записи. Я хочу составить список записей.

Я пробовал re.findall(r"([A-Z].+?)\s[A-Z]"). Но он отфильтровывает каждую вторую запись. Вместо [«Похищение и редукция», «Исследование действия: пример», «Анализ дисперсии (ANOVA)»] Я получаю: [«Похищение и редукция», «Анализ дисперсии (ANOVA)»]

+0

Добро пожаловать на переполнение стека! Похоже, вы хотите, чтобы мы написали вам код. Хотя многие пользователи готовы создавать код для кодера, терпящего бедствие, обычно помогают, когда плакат уже попытался решить проблему самостоятельно. Хорошим способом продемонстрировать это усилие является включение кода, который вы написали, пример ввода (если таковой имеется), ожидаемый вывод и вывод, который вы фактически получаете (вывод консоли, трассировки стека, ошибки компилятора - независимо от того, что применимо). Чем больше деталей вы предоставляете, тем больше ответов вы получите. Проверьте [FAQ] и [ask] –

ответ

1

По умолчанию вы можете иметь перекрывающиеся результаты, это причина, по которой пропущена вся вторая непрерывная запись (поскольку вы соответствуете его первой букве). Способ избежать этой проблемы, чтобы не соответствовать этому первое письмо с помощью опережения утверждение (?=..), что означает «следуют» (A опережающего просмотра только чек и не совпадает ни с чем):

re.findall(r"(\b[A-Z].+?)(?=\s[A-Z]|\s*$)") 
Смежные вопросы