【问题标题】:string replace() method doesn't seem to work字符串替换()方法似乎不起作用
【发布时间】:2021-02-26 23:20:09
【问题描述】:

我正在尝试编写一个 Python 程序来修复用户列表中提供的所有链接的格式。

每个链接都应该类似于"https://example.com"。所以我使用replace 用新零件替换错误的零件。但是.replace 方法似乎根本不起作用,我很难找出原因。

我正在尝试将其设置为一个函数。这是我的代码:

from re import findall

def get_urls():
    # Gets urls from the provided string
    urls = input("Stream urls: ").split(",")
    for i, url in enumerate(urls):
        urls[i] = findall(r'(https?://[^\s]+)', url)
        if "https://www." in urls[i]:
            urls[i] = urls[i].replace("https://www.", "https://")
        elif "www." in urls[i]:
            urls[i] = urls[i].replace("www.", "https://")
        elif "http://" in urls[i]:
            urls[i] = urls[i].replace("http://", "https://")
        return urls

print(get_urls())

输出打印回给我,但链接保持不变。我的代码中似乎没有错字或直接的语法错误,因为 IDE 没有报告任何此类错误。

我做错了什么?

【问题讨论】:

  • 我正在使用“from re import findall”,所以添加 re.我认为应该没有必要。
  • return urls 不应该在循环中。处理完第一个 URL 后返回,其余不变。
  • 你的返回在循环内,所以在第一个 url 之后它会返回并且不会处理任何其他 url,你的意思是在循环之外吗?
  • 我确实做到了。这发生在我试图从纯粹的悲伤中“猜测”正确的组合时......

标签: python python-3.x for-loop methods replace


【解决方案1】:

这段代码有几个问题:

  • re.findall 返回一个列表,因此"https://www." in urls[i](以及其他 2 个检查)可能始终为 False

  • 您需要再次迭代urls,或者干脆不要使用findall。看来您可以只使用startswithre.match

  • 你在循环中returning,这看起来也不像你打算做的。


def get_urls():
    # Gets urls from the provided string
    urls = input("Stream urls: ").split(",")
    for i, url in enumerate(urls):
        if url.startswith("https://www."):
            urls[i] = urls[i].replace("https://www.", "https://")
        elif url.startswith("www."):
            urls[i] = urls[i].replace("www.", "https://")
        elif url.startswith("http://"):
            urls[i] = urls[i].replace("http://", "https://")
    return urls

【讨论】:

  • findall 在那里,因为我需要在之后检测错误的用户输入。例如,如果用户要粘贴 4 个链接,其中一个链接不会是我需要确保只有链接通过。我完全不确定如何进行此过滤,因为任何配置都会导致几乎不同的问题。
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 2015-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多