python - 使用 pandas 数据框列中的正则表达式删除 URL 字符串的一部分

标签 python regex pandas

我需要清理一些网址以删除唯一的跟踪代码,以便在报告时可以将它们计入一组而不是 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/

相关文章:

python - 尝试在 Path 对象 Python 上使用/

python - Pandas 中列名的异常排序

python - 在 for 循环中使用 pandas 附加在新列中获取不需要的值

python - 具有固定队列大小或缓冲区的 multiprocessing.Pool.imap_unordered?

python - 在线程中捕获中断的系统调用

python - 5*5的格子,在每3*3的格子里必须有4个 "lights"

java - 删除java源代码中的注释

javascript - 我在使用 PHP 从 Javascript 中提取值时遇到问题

javascript - 电子邮件正则表达式与 Ruby 和 Javascript 兼容

python - 如何使用 pandas 标准提取组列表元素