【问题标题】:Split SSH-style user@domain/path? [duplicate]拆分 SSH 样式的用户@域/路径? [复制]
【发布时间】:2020-11-16 21:19:55
【问题描述】:

我有类似我们在ssh / rsync 中输入的网址:

s1 = 'user1@1.2.3.4/home/test/blabla'
s2 = 'user2@example.com/home/test/blabla'

这是获取用户、域、路径的可靠方法吗?适用于所有类型的 URL:

user = s1.split('@')[0]
domain = s1.split('@')[1].split('/')[0]
path = s1.split('@')[1].split('/')[1]

或者有没有更好的方法,包含在 Python 标准库中?

注意:似乎有不同的标准化,请参阅URL format for ssh://

【问题讨论】:

  • 我看到的问题是path -- 因为path = s1.split('@')[1].split('/')[1] 只会给你hometest 对吗?所以也许没有钥匙就分开它。 path = s1.split('@')[1].split('/') 回滚数组 path 并重新创建路径 for x in path: y = y + '/' + x 或类似的东西——当然必须跳过第一次迭代,因为那将是 user@example.com

标签: python url ssh rsync


【解决方案1】:

请注意,@ 上的拆分不允许路径中有第二个 @。并且路径拆分不包括所有子目录。

正则表达式功能更强大,可以比详细的拆分更容易理解。他们可以使用() 轻松地对每个部分进行分组:

user, domain, path = re.match(r"([^@]+)@([^/]+)(/.*)", s1).groups()

【讨论】:

    【解决方案2】:

    你可以使用正则表达式:

    import re
    
    s1 = 'user1@1.2.3.4/home/test/blabla'
    
    user = re.search(r'^(.+?)(?=\@)', s1).group()
    domain = re.search(r'(?<=\@)(.+?)(?=\/)', s1).group()
    path = re.search(r'/(.+?)$', s1).group()
    
    print(user)    # user1
    print(domain)  # 1.2.3.4
    print(path)    # /home/test/blabla
    
    

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2011-05-24
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      相关资源
      最近更新 更多