【问题标题】:Check if string starts with any of two (sub) strings检查字符串是否以两个(子)字符串中的任何一个开头
【发布时间】:2022-11-16 21:41:26
【问题描述】:

我正在尝试为布尔函数传递一些选项,我是这样写的:

s = 'https://www.youtube.com/watch?v=nVNG8jjZN7k'
s.startswith('http://') or s.startswith('https://')

但我想知道是否有更有效的方法来编写它, 就像是:

s.startswith('http://' or 'https://')

【问题讨论】:

  • s.startswith('http')?
  • any(s.startswith(protocol) for protocol in ['http://', 'https://'])

标签: python


【解决方案1】:

str.startswith 可以将字符串元组作为参数。如果字符串以开头,它将返回 true任何他们中的。

s.startswith(('http://', 'https://'))

但是,使用正则表达式来捕捉 s 是可选的想法可能更简单:

bool(re.match('https?://', s))

如果匹配成功,你会得到一个真实的re.Match对象。如果匹配失败,你会得到伪值None

【讨论】:

    【解决方案2】:

    你可以使用urllib.parse.urlparse

    from urllib.parse import urlparse
    
    
    url = 'https://www.youtube.com/watch?v=nVNG8jjZN7k'
    
    if urlparse(url).scheme in ("http", "https"):
       ...
    

    更多有用的方法在文档https://docs.python.org/3/library/urllib.parse.html#module-urllib.parse

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 2017-11-27
      • 2013-09-04
      • 2011-05-04
      • 2011-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多