拆分 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()
我有类似于我们在 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://。
您可以使用正则表达式:
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()