фильтр регулярных выражений для списка слов до n-го появления символа - PullRequest
0 голосов
/ 17 июня 2020

У меня есть Dataframe с URL-адресами. У меня есть черный список слов для фильтрации этих URL-адресов. Нет, я хочу фильтровать эти URL-адреса до третьего появления /. Так, например:

http://example.com/abc/def/

Здесь я хотел бы фильтровать только до третьего появления /.

Итак, просто: http://example.com/

Я прочитал несколько похожих вопросов и думаю, мне нужно объединить два регулярных выражения.

  1. /.*?/(.*?)/ это должно сработать для фильтрации до третьего появления /

  2. для фильтрации списка слов я использую это выражение:

mask = df["url"].str.contains(r'\b(?:{})\b'.format('|'.join(blacklist)))
df_new = df[~mask]

Теперь я не знаю, как совместить эти два выражения. Я новичок в Python и особенно в регулярных выражениях, поэтому может быть более разумный способ выполнить эту задачу.

Спасибо.

EDIT: черный список выглядит так: ["ebay","shop","camping","car"]

Df вот так:

url                             text
http://example.com/abc/def/     fdogjdfgfd
http://abcde.com/yzt/egd/        oijfgfdgdf
http://ebay.com/buy/something    fgfgeg

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Вы можете сначала extract часть URL до третьего '/', а затем использовать logi c на этом:

mask = df["url"].str.extract(r'((?:[^/]*/[^/]*){,3})').str.contains(r'\b(?:{})\b'.format('|'.join(blacklist)))
1 голос
/ 17 июня 2020

Используйте, Series.str.contains с данным шаблоном регулярного выражения:

pattern = '|'.join(rf'(?://[^/]*?{b}[^/]+)' for b in blacklist)
m = df['url'].str.contains(pattern, case=False)
df = df[~m]

# print(df)
                           url        text
0  http://example.com/abc/def/  fdogjdfgfd
1    http://abcde.com/yzt/egd/  oijfgfdgdf

Вы можете протестировать регулярное выражение here.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...