我有一个主机名,例如
ab-test-db-dev.0002-colo1-vm234.abc.domain.com
(是的,内部没有遵循主机名约定。)
我试图将此主机名拆分为
ab-test-db-dev.0002-colo1-vm234
模式用“.”分隔,但前提是该点后面没有其他特殊字符。
我试过了
pattern = domain.split(".")
但只需要直到
ab-test-db-dev and not ab-test-db-dev.0002-colo1-vm234
作为第一个元素。
实现这一目标的最佳方法是什么?
最佳答案
您可以删除第一部分,直到不再有破折号为止;这将是要从主机名中删除的域名:
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'
关于当关键字出现在模式后面时,python 分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721841/