您可以刪除第一部分,直到不再有破折號;那會是域名從主機名中刪除:
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'。代替。 –