WedX - журнал о программировании и компьютерных науках

Почему я получаю NoneType вместо объекта соответствия для этого регулярного выражения?

серия панда серия.

regex=r"[A-Z]{3,4}\d?"
def no_fracionario(series):
    lista_ticks1=[]
    for item in series:
        tick=re.search(regex,item)
        lista_ticks1.append(tick.group())
    return lista_ticks1


AttributeError                            Traceback (most recent call last)
<ipython-input-95-7cd5d3ae178b> in <module>
----> 1 lista_ticks=no_fracionario(codneg)

<ipython-input-94-44ce77e449c1> in no_fracionario(series)
      4     for item in series:
      5         tick=re.search(regex,item)
----> 6         lista_ticks1.append(tick.group())
      7     return lista_ticks1

AttributeError: 'NoneType' object has no attribute 'group'
04.02.2020

  • Матча не было. Почему бы вам просто не использовать df['col'].str.extract(r'([A-Z]{3,4}\d?)', expand=False)? 04.02.2020
  • хотя бы образец текста? Также я рекомендую вам попробовать скрипт регулярного выражения в Интернете, прежде чем переходить на Python с помощью любого онлайн-сервиса, например: pythex.org 04.02.2020
  • Добро пожаловать в StackOverflow. См. минимальный воспроизводимый пример. Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код MRE и точно не укажете проблему. Мы должны иметь возможность вставить ваш опубликованный код в текстовый файл и воспроизвести указанную вами проблему. 04.02.2020
  • @WiktorStribiżew, когда я тестировал код для одного элемента, он сработал. Я хотел бы иметь список с биржевыми тиками, чтобы использовать их в качестве фильтра для удаления их из фрейма данных. 04.02.2020
  • @Ghanem, регулярное выражение работает, я пробовал его для одного элемента из набора данных. 04.02.2020
  • Я хотел бы иметь список с биржевыми тиками, чтобы использовать их в качестве фильтра для удаления их из фрейма данных. Не могли бы вы рассказать об этом подробнее? 04.02.2020
  • @Prune Мои данные взяты из набора данных размером 500 МБ ... Я не знаю, как я могу их опубликовать. 04.02.2020
  • Опять же, минимальный воспроизводимый пример: вы публикуете ровно столько, сколько нужно, чтобы проиллюстрировать проблему. 04.02.2020

Ответы:


1

Когда вы используете re.search в python, результатом является объект соответствия, только если он действительно нашел совпадение, или None, если он не смог его найти.

Например, если бы я сделал match = re.search(r'a', 'bbb'), значение match было бы None, потому что в строке 'bbb' нет совпадения для r'a'. Если я затем попытаюсь вызвать match.group(), я вызову .group() на None, что приведет к ошибке AttributeError: 'NoneType' object has no attribute 'group', потому что None не имеет метода с именем group.

Чтобы избежать вашей ошибки, вы можете сделать это:

regex=r"[A-Z]{3,4}\d?"
def no_fracionario(series):
    lista_ticks1=[]
    for item in series:
        tick=re.search(regex,item)
        if tick is not None:
            lista_ticks1.append(tick.group())
    return lista_ticks1

Таким образом, вы будете вызывать .group() только для реального объекта совпадения (не None), когда поиск успешно найдет совпадение с вашим регулярным выражением.

Дополнительные сведения о регулярных выражениях в Python см. в документации или это полезное руководство

04.02.2020
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: [email protected]