您可以删除第一部分,直到不再有破折号;那会是域名从主机名中删除:
hostname = domain
while '-' in domain:
domain = domain.partition('.')[-1]
hostname = hostname[:-len(domain) - 1]
或周围的其他方法,除去最后一部分,如果它不包含破折号,与str.rpartition()
:
hostname = domain
while True:
first, _, end = hostname.rpartition('.')
if '-' in end:
break
hostname = first
使用正则表达式寻找一个只包含字母和点任何部分:
import re
hostname = re.sub(r'\.[a-z.]+$', '', domain)
演示:
>>> domain = 'ab-test-db-dev.0002-colo1-vm234.abc.domain.com'
>>> hostname = domain
>>> while '-' in domain:
... domain = domain.partition('.')[-1]
...
>>> hostname[:-len(domain) - 1]
'ab-test-db-dev.0002-colo1-vm234'
>>> domain = 'ab-test-db-dev.0002-colo1-vm234.abc.domain.com'
>>> hostname = domain
>>> while True:
... first, _, end = hostname.rpartition('.')
... if '-' in end:
... break
... hostname = first
...
>>> hostname
'ab-test-db-dev.0002-colo1-vm234'
>>> import re
>>> re.sub(r'\.[a-z.]+$', '', domain)
'ab-test-db-dev.0002-colo1-vm234'
定义*没有其他特殊字符*在这里。你的意思是你想拆分包含破折号和数字的名称的任何部分? –
您可能想要使用'hostname -s'。从'man hostname' - >'显示短主机名。这是在第一个点处切割的主机名' – fedorqui
@fedorqui:不,这会给'ab-test-db-dev'。代替。 –