正则表达式过滤器用于单词列表,直到出现第 n 个字符



我有一个带有网址的数据帧。我有一个黑名单,其中包含过滤这些网址的单词。 不,我想过滤这些网址,直到第三次出现/。 所以例如:

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 的新手,尤其是正则表达式,所以可能还有更聪明的方式来完成这项任务。

谢谢。

编辑: 黑名单如下所示:["ebay","shop","camping","car"]

像这样:

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

您可以先将 url 的部分extract到第三个'/',然后对此使用逻辑:

mask = df["url"].str.extract(r'((?:[^/]*/[^/]*){,3})').str.contains(r'b(?:{})b'.format('|'.join(blacklist)))

使用,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

最新更新