拆分 SSH 样式的用户@domain/path?

Split SSH-style user@domain/path?

我有类似于我们在 ssh / rsync:

中输入的 URL
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://

您可以使用正则表达式:

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

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

正则表达式更强大,可以更容易理解详细拆分。他们可以用 () 轻松地将每个部分捕获到组中:

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