我有一个带有网址的数据帧。我有一个黑名单,其中包含过滤这些网址的单词。 不,我想过滤这些网址,直到第三次出现/
。 所以例如:
http://example.com/abc/def/
在这里,我只想过滤直到第三次出现/
.
所以只是: http://example.com/
我读了一些类似的问题,我想我需要结合两个正则表达式。
-
/.*?/(.*?)/
这应该可以完成过滤工作,直到第三次出现/
-
为了过滤单词列表,我使用此表达式:
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
。