python - 从字符串中检测和删除子字符串
问题描述
我正在使用 URL,有时最终会出现随机重复的短语,这些短语会影响我的脚本。我想删除重复项。
所以,我从这样的事情开始:
url = "https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&lc=1033&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&id=38936&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US&mkt=en-US"
并希望将其转换为:
url = "https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&id=38936&mkt=en-US"
我看过的所有解决方案都依赖于单词之间的空格或字符串开头的重复模式。在我的情况下,重复模式没有这些界限来作为我分组的基础。
我怎样才能做到这一点?
解决方案
第一步是提取查询字符串并将split
其分成&
字符上的单独部分;最后一步是将join
零件与&
.
假设重复项总是像您的示例输入一样彼此相邻,您可以使用itertools.groupby
以保留原始顺序将它们过滤掉:
import itertools
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(k for k, _ in itertools.groupby(parts))
# 'https://account.live.com/consent/Manage?fn=email&uaid=51e2193a466c4846a4317b94931b9086&lc=1033&id=38936&mkt=en-US'
如果重复项可能不相邻,并且您不需要保留查询字符串中参数的顺序,则可以使用set
删除重复项:
def remove_duplicate_params(url):
path, _, query_string = url.partition('?')
parts = query_string.split('&')
return path + '?' + '&'.join(set(parts))
# 'https://account.live.com/consent/Manage?fn=email&mkt=en-US&lc=1033&id=38936&uaid=51e2193a466c4846a4317b94931b9086'
推荐阅读
- azure - 是否可以删除托管在 Azure 上的 Web 应用程序上的弱密码或编辑注册表设置?
- python - 从程序将代码写入文件时,如何让我的字典开始一个新行?
- django - django restful api,在 url 中有嵌套对象
- r - 如何避免predict.gam中的“数据错误[[txt]]:下标越界”错误?
- javascript - 有没有办法使用 Linux Ubuntu 20.04 LTS 打开代码目录?
- button - 一个正方形可以有两个按钮吗?
- javascript - 有没有比较javascript中的值的方法?
- json - 如何在 scala 中获取 json 字符串的深层元素?
- c# - 是否可以使用 C# 可选参数作为变量?
- c++ - clang++ 中的 SFINAE 模板构造函数中的模棱两可推演,而不是 g++