【问题标题】:Replace a particular substring in a list of string with another substring用另一个子字符串替换字符串列表中的特定子字符串
【发布时间】:2020-09-25 05:33:31
【问题描述】:

我正在为我的问题举一个示例场景。 如果我有一个 URL 列表:

url_list=["https:www.example.com/pag31/go","https:www.example.com/pag12/go","https:www.example.com/pag0/go"]

我想替换“.com/”和“go”之间的子字符串

例如。新网址应该是这样的

['https:www.example.com/home/go','https:www.example.com/home/go','https:www.example.com/home/go']

我已尝试根据索引进行切片和替换,但无法获得整个列表所需的结果。

非常感谢任何帮助。 提前致谢。

【问题讨论】:

    标签: python python-3.x string list


    【解决方案1】:

    您可以使用 regex sub() 和列表推导将您的逻辑应用于列表的每个元素。

    import re
    
    url_list=["https:www.google.com/pag31/go","https:www.facebook.com/pag12/go","http:www.bing.com/pag0/go"]
    
    pattern = r'(?<=com\/).*(?=\/go)'
    
    result = [re.sub(pattern, 'home', url) for url in url_list]
    

    这将匹配在com//go 之间找到值的任何字符串。这也将确保我们捕获任何网站,无论 http(s) 是什么。

    输出:

    ['https:www.google.com/home/go', 'https:www.facebook.com/home/go', 'http:www.bing.com/home/go']
    

    正则表达式解释

    模式r'(?&lt;=com\/).*(?=\/go)' 查找以下内容:

    (?&lt;=com\/):正向向后检查以检查 com/ 是否作为我们查找的前缀

    .*: 无限次匹配任何东西

    (?=\/go):正向前瞻检查/go是否直接出现在.*之后

    这使我们能够匹配肯定检查之间的任何字符串。你可以找到关于模式here的更深入的解释

    【讨论】:

      【解决方案2】:

      你可以尝试使用python的regular expressions

      import re
      re_url ="https:www.example.com/.*/go"
      url = "https:www.example.com/home/go"
      url_list_new= [re.sub(re_url,url,x) for x in url_list]
      url_list_new
      

      输出:

       ['https:www.example.com/home/go',
       'https:www.example.com/home/go',
       'https:www.example.com/home/go']
      

      【讨论】:

      • 这仅适用于发布者列出的example。如果列表中包含除示例之外的任何其他 URL,甚至是 http url,它将不匹配。
      • @PacketLoss 是的,没错。我错过了那件事,感谢您指出。
      猜你喜欢
      • 2011-04-06
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-23
      • 2017-06-22
      • 1970-01-01
      • 2020-10-04
      相关资源
      最近更新 更多