我需要清理一些网址以删除唯一的跟踪代码,以便在报告时可以将它们计入一组而不是 1000 个单独的页面。
要删除的代码位于网址中间,长度各不相同。
示例网址为
https://www.website.co.uk/product/?commcodeABBB/home-page/
我正在努力得到这个
https://www.website.co.uk/product/home-page/
我有类似的代码用于删除 url 字符串的末尾:
df["URL"] = df["URL"].str.replace('\/id.*','/',regex=True)
我尝试根据我的新场景修改它。
df["URL"] = df["URL"].str.replace('\/\?commcode.{0,5}','/',regex=True)
在这种情况下,正则表达式 \/\?commcode.{0,5}
会选择 ?commcodeABBB/,但是我的网址中代码字符串的长度有所不同,因此它不适用于所有情况。
我不知道如何编写它,以便它可以获取从 ?commcode 到并包括下一个/的所有内容。我查看了\w\W 的“中间”,但它不能识别/只能识别字母数字字符。
我读过许多关于类似问题的其他帖子,但我找不到任何能完全解决这个问题的帖子。我无法使用随着长度变化而从字符串的开头或结尾开始计数的代码,就像网址中/的数量一样,因此我无法使用“在第二个和第三个/之间”方法。
请问有什么想法吗?
最佳答案
使用
df["URL"] = df["URL"].str.replace(r'/\?commcode[^/]*', '')
参见proof .
说明
--------------------------------------------------------------------------------
/ '/'
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
commcode 'commcode'
--------------------------------------------------------------------------------
[^/]* any character except: '/' (0 or more times
(matching the most amount possible))
关于python - 使用 pandas 数据框列中的正则表达式删除 URL 字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64109328/