python - 在 pandas 数据框的列中使用正则表达式删除部分 URL 字符串
问题描述
我需要清理一些 url 以删除唯一的跟踪代码,以便在报告时可以将它们计入一个组而不是 1000 个单独的页面。
要删除的代码位于 url 的中间,并且长度不同。
示例网址是
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/ 但是我的 URL 中代码字符串的长度会有所不同,因此它不会适用于所有内容。
我无法弄清楚如何编写它,以便它包含从 ?commcode 到并包括下一个 / 的所有内容。我查看了 \w \W 的“中间”,但它不识别/仅识别字母数字字符。
我已经阅读了许多其他关于类似问题的帖子,但没有什么能完全解决我能找到的这个问题。我不能使用从字符串开头或结尾开始计数的代码作为长度变化,网址中 / 的数量也是如此,所以我不能使用 'between 2nd and 3rd / 方法。
请问有什么想法吗?
解决方案
利用
df["URL"] = df["URL"].str.replace(r'/\?commcode[^/]*', '')
见证明。
解释
--------------------------------------------------------------------------------
/ '/'
--------------------------------------------------------------------------------
\? '?'
--------------------------------------------------------------------------------
commcode 'commcode'
--------------------------------------------------------------------------------
[^/]* any character except: '/' (0 or more times
(matching the most amount possible))
推荐阅读
- github - 如何在 github 拉取请求中显示评论应用程序 url
- flutter - Flutter bloc 状态无法正确更新
- java - 如何将 thymeleaf HTML 页面中的数据发送到 MVC spring boot 控制器?
- html - 如何为每周调度程序 UI 设置跨度元素的样式
- azure - 错误:将 Function 部署到 Azure 后,无法加载文件或程序集“System.ServiceModel,版本 = 4.0.0.0”
- c - GCC 会编译,但 clang 不会
- node.js - NPM 没有显示最新版本的 json-parse-better-errors
- php - 如何使用 CI 和 Morris 在 1 个视图中制作视图表和图形
- python - Ctrl+C 不让我退出服务器 | 蟒蛇
- metasploit - 如何使用 metasploit 开始和活动