Python регулярное выражение или другое решение для извлечения текстовых элементов из строки? - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть строка, которая выглядит следующим образом:

\nInhaltse / techn. Angaben*\n\nAQUA • COCO-GLUCOSIDE • COCOSULFATE • SODIUM\n\n\

И мне нужно получить список элементов между точками, как показано ниже:

AQUA COCO-GLUCOSIDE COCOSULFATE  SODIUM

Я пытался сregex и другие инструменты, но я не могу найти правильный, гибкий * ответ.

* Flexible = список может содержать от 1 до N элементов

1 Ответ

0 голосов
/ 20 сентября 2018

Вы должны немного лучше определить, какие возможности и какие правила вы хотите применить.
Я думаю, что правило типа 'любое слово, содержащее как минимум 2 заглавных буквы или тире, предшествующее и следующеечерез пробел или \ n ' может работать для вас.Если это так, вот ваш RegEx:

import re

my_string = "\nInhaltse / techn. Angaben*\n\nAQUA • COCO-GLUCOSIDE • COCOSULFATE • SODIUM\n\n"

print(re.findall(r"(?<=\n|\s)[A-Z-]{2,}(?=\n|\s)", my_string))

Выход:

['AQUA', 'COCO-GLUCOSIDE', 'COCOSULFATE', 'SODIUM']

и вот как вы читаете RegEx:

(?<=\n|\s) означает с предшествующей (?<=) новой строкой (* 1021)*) или (|) пробел (\s)
[A-Z-\s]{2,} означает как минимум два ({2,}) заглавные буквы, тире и пробелы ([A-Z-\s])
(?=\n|\s) означает , за которыми следует (?=)новая строка (\n) или (|) пробел (\s)

или дляподгонка лучше вашего запроса:

получите список пунктов между точками

, которые вы можете использовать:

r"(?<=\n\n|\•\s)[A-Z-\s]{2,}(?=\n\n|\s\•)"

, что означает:

как минимум 2 заглавные буквы, тире или пробелы, перед которыми стоят две новые строки или точка и пробел, а затем две новые строки или пробел и точка

...