REGEX, чтобы найти все совпадения внутри заданной строки - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть проблема, которая сводит меня с ума в настоящее время.У меня есть список с несколькими миллионами записей, и мне нужно извлечь категории продуктов из них.Каждая запись выглядит следующим образом: "[['Electronics', 'Computers & Accessories', 'Cables & Accessories', 'Memory Card Adapters']]" Проверка типа действительно дала мне строку: print(type(item)) <class 'str'> Теперь я искал в Интернете возможное (и желательно быстрое - из-за миллиона записей) решение регулярных выражений для извлечения всех категорий.

Я нашел несколько вопросов здесь Подберите одинарные кавычки из python re : я пробовал re.findall(r"'(\w+)'", item), но получил только пустые скобки [].Затем я продолжил поиск альтернативных методов, таких как этот: Python Regex, чтобы найти строку в двойных кавычках внутри строки Там кто-то пытается выполнить следующее matches=re.findall(r'\"(.+?)\"',item) print(matches), но в моем случае это тоже не удалось ...

После этого я попробовал какой-то идиотский подход, чтобы найти хотя бы обходной путь и решить эту проблему позже: list_cat_split = item.split(','), что дает мне

e["[['Electronics'"," 'Computers & Accessories'"," 'Cables & Accessories'"," 'Memory Card Adapters']]"]

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

list_categories = []
for item in list_cat_split:
    item.strip('\"')
    item.strip(']')
    item.strip('[')
    item.strip()
    category = re.findall(r"'(\w+)'", item)
    if category not in list_categories:
        list_categories.append(category)

, однако даже этот подход не удался: [['Electronics'], []] Я искал дальше, но не нашел правильного решения.Извините, если этот вопрос является полностью глупым, я новичок в регулярных выражениях, и, вероятно, это обычная задача для регулярных пользователей регулярных выражений?

ОБНОВЛЕНИЕ:

Почему-то я не могу ответить на свой собственный вопрос, поэтомувот обновление: спасибо за ответы - извините за неполную информацию, я очень редко спрашиваю здесь и обычно пытаюсь найти решения самостоятельно .. Я не хочу использовать базу данных, потому что это лишь малая часть моей работы по предварительной обработкедля ML-приложения, написанного полностью на Python.Также это для моего MSc проекта, поэтому нет производственной среды.Поэтому я в порядке с более медленным, но работающим решением, поскольку я делаю это раз и навсегда.Однако, насколько я вижу, решение @FailSafe сработало для меня: снимок экрана моего ноутбука jupyter здесь результат со списком

Но да, я полностью согласен с@ Wiktor Stribiżew: в производственной установке я наверняка настроил бы базу данных и позволил бы ей работать всю ночь, в любом случае, спасибо за помощь, замечательные люди здесь: -)

1 Ответ

0 голосов
/ 22 апреля 2019

это может быть не ваш окончательный ответ, но он создает список категорий.

x="[['Electronics', 'Computers & Accessories', 'Cables & Accessories', 'Memory Card Adapters']]"

y=x[2:-2]
z=y.split(',')

for item in z:
    print(item)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...