【问题标题】:Replace multiple patterns once at a time with python用python一次替换多个模式
【发布时间】:2022-10-02 04:19:32
【问题描述】:

所以我想做的基本上是我有一个带有多个参数的url列表,例如:

https://www.somesite.com/path/path2/path3?param1=value1&param2=value2

我想得到的是这样的:

https://www.somesite.com/path/path2/path3?param1=PAYLOAD&param2=value2
https://www.somesite.com/path/path2/path3?param1=value1&param2=PAYLOAD

就像我想遍历每个参数(基本上是 \"=\" 和 \"&\" 的每个匹配项)并每次替换每个值。先感谢您。

  • urllib 开始解析URL 并获取参数列表。然后您可以遍历列表,每次替换一个值,然后将它们组合回一个完整的 URL。

标签: python loops replace split match


【解决方案1】:
from urllib.parse import urlparse
import re

urls = ["https://www.somesite.com/path/path2/path3?param1=value1&param2=value2&param3=value3",
        "https://www.anothersite.com/path/path2/path3?param1=value1&param2=value2&param3=value3"]
parseds = [urlparse(url) for url in urls]
newurls = []
for parsed in parseds:
    params = parsed[4].split("&")
    for i, param in enumerate(params):
        newparam = re.sub("=.+", "=PAYLOAD", param)
        newurls.append(
            parsed[0] +
            "://" +
            parsed[1] +
            parsed[2] +
            "?" +
            parsed[4].replace(param, newparam)
            )

newurls

['https://www.somesite.com/path/path2/path3?param1=PAYLOAD&param2=value2&param3=value3',
 'https://www.somesite.com/path/path2/path3?param1=value1&param2=PAYLOAD&param3=value3',
 'https://www.somesite.com/path/path2/path3?param1=value1&param2=value2&param3=PAYLOAD',
 'https://www.anothersite.com/path/path2/path3?param1=PAYLOAD&param2=value2&param3=value3',
 'https://www.anothersite.com/path/path2/path3?param1=value1&param2=PAYLOAD&param3=value3',
 'https://www.anothersite.com/path/path2/path3?param1=value1&param2=value2&param3=PAYLOAD']

【讨论】:

  • @FozenOption 如果顺序很重要,我们可以通过正则表达式对参数进行排序。
  • 这不知何故一次只需要两个参数,比如如果有 param3,它会给我 param1 和 param2 或 param1 和 param3 或 param2 和 param3,它省略了第三个参数,你建议做什么改变
  • @FozenOption 我已经编辑了我的答案。
猜你喜欢
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2022-09-30
  • 2021-01-07
相关资源
最近更新 更多