我是 Python 新手,我想知道从区域名称中提取区域名称的最佳方法是什么。
例如:
GCP:
- us-east1-c
- europe-west2-b
AWS:
- eu-west-2
- ap-northeast-1
在 bash 中,我会使用:
echo "zone"|rev|cut -f2- -d-|rev"
在Python中,我使用:
'-'.join(zone.split('-')[:-1]),
我知道这并不重要,但我想以Pythonic的方式来做。
提前致谢!
哦,预期输出是如果区域是 us-east1-b
美国东部1
我认为使用
rsplit
就足够了:
zone = 'us-east1-b'
print(zone.rsplit('-', 1)[0])
# us-east1
或者简单地
split
即可:
zone = 'us-east1-b'
lst = zone.split('-')
print("{}-{}".format(lst[0], lst[1]))
# us-east1
我知道,我有点晚了,只是在寻找相同问题解决方案时遇到了这个问题。
我想没有直接的方法可以做到这一点。很遗憾。 是的,之前的一些答案可能有效,但只是部分有效。并不适合所有情况。 因为有一些更复杂的区域,例如“ap-southeast-1-bkk” 像“
[:-2]
”、“.split('-')[specific_index]
”、“.rsplit('-', 1)[0]
”之类的东西在那里不起作用。
您可以尝试将这些方法结合起来,例如
"-".join(zone.split('-')[0:3])[0:-1]
。它适用于“us-east-1-phl-1a”之类的内容。但对于像“ap-southeast-1-bkk-1a”之类的东西就不行了。
Idk,似乎只有一种 100% 正确的方法 - 使用正则表达式。我不是这方面的专家,所以也许有人会纠正这个例子。我已经在两个完全不同的区域测试了以下示例,似乎有效:
zone = "ap-southeast-1-bkk-1a"
zone2 = "us-east-1a"
region_regex = r'(.*?-\d+)'
match1 = re.match(region_regex, zone)
match2 = re.match(region_regex, zone2)
match1.group(1), match2.group(1)
# ('ap-southeast-1', 'us-east-1')
当然,它不会从 us-east1-b 变成 us-east1。不知道您提出问题时 AWS 区域是如何命名的,但现在是“us-east-1d”,不是吗?如果这是它在 Google Cloud 中的命名方式,我想您需要一些额外的工作来适应您的情况的正则表达式公式,并分别为每个云使用它们。